Phần 4: Supervised Learning: Classification phần 1 – Lập trình AI bằng Python

Phần 4: Supervised Learning: Classification phần 1                        – Lập trình AI bằng Python
Trong bài này, ta sẽ tập trung nhiều vào việc học có theo dõi classifcation.
Kỹ thuật phân loại hay mô hình nỗ lực nhận được những kết luận từ những giá trị quan sát được. Trong bài toán phân loại, chúng tôi có đầu ra được phân loại như “Đen” hay “trắng” hay “Dạy” và “Không dạy”. Trong khi xây dựng mô hình phân loại, ta cần phải có tập dữ liệu huấn luyện chứa các điểm dữ liệu và các nhãn tương ứng. Ví dụ, nếu như ta muốn kiểm tra xem hình ảnh có phải của 1 chiếc ô tô hay là không. Để kiểm tra điều đó, chúng tôi sẽ xây dựng 1 tập dữ liệu đào tạo có 2 lớp liên quan tới “ô tô” và “không có ô tô”. Sau đó, ta cần đào tạo mô hình bằng cách sử dụng các mẫu đào tạo. Những mô hình phân loại chủ yếu được dùng trong nhận dạng gương mặt, nhận dạng thư rác, v.v.

1. Những bước xây dựng Classifier trong Python :

Để xây dựng bộ phân loại bằng Python, ta sẽ sử dụng Python 3 và Scikit-learning là 1 công cụ dành cho học máy. Thực hiện theo những bước sau để xây dựng bộ phân loại bằng Python –
Bước 1 : Import Scikit-learn :
Đây sẽ là bước trước tiên để xây dựng 1 bộ phân loại trong Python. Trong bước này, tai sẽ cài đặt 1 gói Python có tên là Scikit-learning, là 1 trong các mô-đun học máy tốt nhất trong Python.Cú pháp như dưới đây:
Import Sklearn
Bước 2 : Import Scikit-learn dataset:
Chúng ta sẽ có thể bắt đầu làm việc với tập dữ liệu cho mô hình học máy của chính mình. Tại đây, chúng tôi sẽ sử dụng Cơ sở dữ liệu chẩn đoán ung thư vú của Wisconsin. Bộ dữ liệu gồm nhiều thông tin khác nhau về những khối u ung thư vú, cũng như là các nhãn phân loại ác tính hay lành tính. Tập dữ liệu rằng có 569 trường hợp hay dữ liệu về 569 khối u và gồm thông tin về 30 thuộc tính hay đặc điểm, ví dụ như bán kính của khối u, kết cấu, độ mịn và diện tích. Với sự giúp đỡ của lệnh sau, chúng tôi có thể nhập bộ dữ liệu về bệnh ung thư vú của Scikit-learning –
from sklearn.datasets import load_breast_cancer
Sau đó bắt đầu load dữ liệu :
knowledge = load_breast_cancer()
Một số tham số quan trọng :
  • Classification label names(target_names)
  • The precise labels(goal)
  • The attribute/characteristic names(feature_names)
  • The attribute (knowledge)
label_names = knowledge['target_names']
labels = knowledge['target']
feature_names = knowledge['feature_names']
options = knowledge['data']
Ta hãy xem qua dữ liệu :
print(label_names)
Lệnh trên sẽ in ra tên lớp tương ứng là ác tính và lành tính. Nó được hiển thị như đầu ra phía dưới:
['malignant' 'benign']
Hiện tại, lệnh sau đây sẽ cho ta thấy rằng chúng được ánh xạ đến những giá trị nhị phân 0 và 1. Tại đây 0 đại diện cho ung thư ác tính và 1 đại diện cho ung thư lành tính. Bạn sẽ được nhận kết quả sau:
print(labels[0])
0
Hai lệnh sau đây sẽ tạo nên tên đối tượng và giá trị đối tượng.
print(feature_names[0])
imply radius
print(options[0])
[ 1.79900000e+01 1.03800000e+01 1.22800000e+02 1.00100000e+03
  1.18400000e-01 2.77600000e-01 3.00100000e-01 1.47100000e-01
  2.41900000e-01 7.87100000e-02 1.09500000e+00 9.05300000e-01
  8.58900000e+00 1.53400000e+02 6.39900000e-03 4.90400000e-02
  5.37300000e-02 1.58700000e-02 3.00300000e-02 6.19300000e-03
  2.53800000e+01 1.73300000e+01 1.84600000e+02 2.01900000e+03
  1.62200000e-01 6.65600000e-01 7.11900000e-01 2.65400000e-01
  4.60100000e-01 1.18900000e-01]
Từ kết quả trên, ta có thể nhận thấy rằng trường hợp dữ liệu đầu tiên là 1 khối u ác tính có bán kính là 1.7990000e + 01.
Bước 3 : Tổ chức dữ liệu thành tập hợp
Trong bước này, ta sẽ chia dữ liệu của chính mình thành 2 phần chi tiết là tập huấn luyện và tập kiểm tra. Việc phân nhỏ dữ liệu thành các tập hợp này là rất quan trọng vì ta phải kiểm tra mô hình của chính mình trên dữ liệu không nhìn thấy. Để chia dữ liệu thành các tập hợp, sklearn có 1 hàm gọi là hàm train_test_split (). Sử dụng những lệnh sau, ta sẽ có thể chia dữ liệu trong các tập hợp này:
from sklearn.model_selection import train_test_split
Lệnh trên sẽ nhập hàm train_test_split từ sklearn và lệnh dưới sẽ chia dữ liệu thành dữ liệu huấn luyện và kiểm tra. Trong ví dụ sau đây, chúng tôi đang dùng 40% dữ liệu để test và dữ liệu còn lại sẽ được dùng để đào tạo mô hình.
prepare, take a look at, train_labels, test_labels = train_test_split(options,labels,test_size = 0.40, random_state = 42)
Bước 4 : Xây dựng mannequin :
Trong bước này, chúng tôi sẽ xây dựng mô hình của chính mình. Chúng tôi sẽ sử dụng thuật toán Naïve Bayes để xây dựng mô hình. Những lệnh sau có thể được dùng để xây dựng mô hình:
from sklearn.naive_bayes import GaussianNB
Lệnh trên sẽ nhập mô-đun GaussianNB. Hiện tại, lệnh sau sẽ giúp các bạn khởi tạo mô hình.
gnb = GaussianNB()
Chúng tôi sẽ đào tạo mô hình bằng cách điều chỉnh nó với dữ liệu bằng cách sử dụng gnb.match ().
mannequin = gnb.match(prepare, train_labels)
Bước 5 : Đánh giá mô hình và độ chính xác của mô hình :
Trong bước này, chúng tôi sẽ đánh giá mô hình bằng cách đưa ra các dự đoán trên dữ liệu thử nghiệm của chúng tôi. Sau đó, chúng tôi sẽ tìm ra độ chính xác của nó. Để đưa ra dự đoán, chúng tôi sẽ sử dụng hàm dự đoán (). Lệnh sau sẽ giúp các bạn làm điều đó:
preds = gnb.predict(take a look at)
print(preds)

(*1*)
Dãy số 0 và 1 bên trên là giá trị dự đoán cho các lớp khối u – ác tính và lành tính.
Hiện tại, bằng cách so sánh 2 mảng là test_labels và preds, chúng ta sẽ có thể tìm ra độ chính xác của mô hình của chính mình. Chúng ta sẽ sử dụng hàm precision_score () để xác định độ chính xác. Hãy xem xét lệnh sau cho điều đó:
from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels,preds))
0.951754385965
Kết quả cho ta thấy trình phân loại NaïveBayes chính xác tới 95,17%.
Với cách này, với sự giúp đỡ của những bước trên, chúng ta sẽ có thể xây dựng bộ phân loại của chính mình bằng Python.

2. Xây dựng Classifier bằng python :

Ở mục này, ta cùng nhau tìm hiểu cách để xây dựng 1 classifier bằng Python :
Naïve Bayes Classifier :
Naïve Bayes là 1 kỹ thuật phân loại được dùng để xây dựng bộ phân loại bằng cách sử dụng định lý Bayes. Giả định là các yếu tố dự đoán là độc lập. Nói 1 cách đơn giản, nó giả định rằng sự hiện diện của 1 đối tượng chi tiết trong 1 lớp không liên quan tới sự hiện diện của bất kỳ đối tượng địa lý nào nữa. Để xây dựng trình phân loại Naïve Bayes, ta cần sử dụng thư viện python được gọi là scikit studying. Có ba loại mô hình Naïve Bayes có tên Gaussian, Multinomial và Bernoulli trong gói học scikit.
Để xây dựng mô hình phân loại học máy Naïve Bayes, ta cần
Dataset
Chúng tôi sẽ sử dụng tập dữ liệu rằng có tên Cơ sở dữ liệu chẩn đoán ung thư vú Wisconsin. Bộ dữ liệu gồm nhiều thông tin khác nhau về những khối u ung thư vú, cũng như là các nhãn phân loại ác tính hay lành tính. Tập dữ liệu rằng có 569 trường hợp hay dữ liệu về 569 khối u và gồm thông tin về 30 thuộc tính hay đặc điểm, ví dụ như bán kính của khối u, kết cấu, độ mịn và diện tích. Chúng tôi có thể nhập tập dữ liệu này từ gói sklearn.
Naïve Bayes Model
Để xây dựng bộ phân loại Naïve Bayes, ta cần 1 mô hình Naïve Bayes. Như đã nói trước đây, có ba loại mô hình Naïve Bayes được đặt tên là Gaussian, Multinomial và Bernoulli trong gói học scikit. Tại đây, trong ví dụ sau, ta sẽ sử dụng mô hình Gaussian Naïve Bayes.
Bằng việc dùng nhiều điều trên, chúng tôi sẽ xây dựng 1 mô hình học máy Naïve Bayes để sử dụng thông tin về khối u để dự đoán khối u là ác tính hay lành tính.
Để bắt đầu, ta cần cài đặt mô-đun sklearn. Nó có thể được bắt đầu với sự giúp đỡ của lệnh sau:
Import Sklearn
Ta cần import dataset tên là Breast Cancer Wisconsin Diagnostic Database.
from sklearn.datasets import load_breast_cancer
Sau đó ta load dữ liệu từ dataset :
knowledge = load_breast_cancer()
label_names = knowledge['target_names']
labels = knowledge['target']
feature_names = knowledge['feature_names']
options = knowledge['data']
Ta thử in giá trị label_name :
print(label_names)
Kết quả như dưới đây ;
['malignant' 'benign']
Hiện tại, lệnh đưa ra sau đây sẽ cho ta thấy rằng chúng được ánh xạ đến những giá trị nhị phân 0 và 1. Tại đây 0 đại diện cho ung thư ác tính và 1 đại diện cho ung thư lành tính. Nó được hiển thị như đầu ra phía dưới:
print(labels[0])
0
Hai lệnh sau sẽ tạo nên tên đối tượng và giá trị đối tượng.
print(feature_names[0])
imply radius
print(options[0])

[ 1.79900000e+01 1.03800000e+01 1.22800000e+02 1.00100000e+03
  1.18400000e-01 2.77600000e-01 3.00100000e-01 1.47100000e-01
  2.41900000e-01 7.87100000e-02 1.09500000e+00 9.05300000e-01
  8.58900000e+00 1.53400000e+02 6.39900000e-03 4.90400000e-02
  5.37300000e-02 1.58700000e-02 3.00300000e-02 6.19300000e-03
  2.53800000e+01 1.73300000e+01 1.84600000e+02 2.01900000e+03
  1.62200000e-01 6.65600000e-01 7.11900000e-01 2.65400000e-01
  4.60100000e-01 1.18900000e-01]
Từ kết quả trên, ta có thể nhận thấy rằng trường hợp dữ liệu đầu tiên là 1 khối u ác tính, bán kính chính của nó là 1.7990000e + 01.
Để test mô hình của chúng tôi trên dữ liệu không nhìn thấy, chúng tôi cần chia dữ liệu của chính mình thành dữ liệu đào tạo và thử nghiệm. Nó có thể được bắt đầu với sự giúp đỡ của đoạn mã sau:
from sklearn.model_selection import train_test_split
Lệnh trên sẽ nhập hàm train_test_split từ sklearn và lệnh dưới sẽ chia dữ liệu thành dữ liệu huấn luyện và kiểm tra. Trong ví dụ sau đây, chúng tôi đang dùng 40% dữ liệu để test và dữ liệu nhắc nhở sẽ được dùng để đào tạo mô hình.
prepare, take a look at, train_labels, test_labels = 
train_test_split(options,labels,test_size = 0.40, random_state = 42)
Chúng ta cùng xây dựng mô hình sau :
from sklearn.naive_bayes import GaussianNB
Lệnh trên sẽ nhập mô-đun GaussianNB. Hiện tại, với lệnh sau đây, ta cần khởi tạo mô hình.
gnb = GaussianNB()
Chúng tôi sẽ đào tạo mô hình bằng cách điều chỉnh nó với dữ liệu bằng cách sử dụng gnb.match ().
mannequin = gnb.match(prepare, train_labels)
Hiện tại, đánh giá mô hình bằng cách đưa ra dự đoán trên dữ liệu thử nghiệm và nó có thể được bắt đầu như dưới đây:
preds = gnb.predict(take a look at)
print(preds)

(*1*)
Dãy số 0 và 1 bên trên là những giá trị dự đoán cho các lớp khối u, tức là ác tính và lành tính.
Hiện tại, bằng cách so sánh 2 mảng là test_labels và preds, chúng ta sẽ có thể tìm ra độ chính xác của mô hình của chính mình. Chúng ta sẽ sử dụng hàm precision_score () để xác định độ chính xác.
from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels,preds))
0.951754385965
Kết quả cho ta thấy trình phân loại NaïveBayes chính xác tới 95,17%.
Đó là trình phân loại học máy dựa vào mô hình Naïve Bayse Gaussian.

3. Support Vector Machines (SVM) :

Về căn bản, Support vector machine (SVM) là 1 thuật toán học máy được theo dõi có thể được dùng cho cả hồi quy và phân loại. Khái niệm chính của SVM là vẽ từng mục dữ liệu dưới dạng 1 điểm trong không gian n chiều với giá trị của mỗi đối tượng là giá trị của 1 tọa độ chi tiết. Đây n sẽ là các tính năng chúng tôi sẽ có. Sau đây chính là 1 biểu diễn đồ họa đơn giản để hiểu khái niệm về SVM –
Trong sơ đồ trên, chia ra thành 2 vùng dữ liệu. Do đó, trước nhất ta cần vẽ 2 biến này trong không gian 2 chiều nơi mỗi điểm có 2 tọa độ, được gọi là vectơ hỗ trợ. Dòng chia dữ liệu thành 2 nhóm được phân loại khác nhau. Dòng này sẽ là bộ phân loại.
Tại đây, ta sẽ xây dựng 1 bộ phân loại SVM bằng cách sử dụng tập dữ liệu scikit-studying và iris. Thư viện Scikitlearn có mô-đun sklearn.svm và cung cấp sklearn.svm.svc để phân loại. Bộ phân loại SVM để dự đoán loại cây diên vĩ dựa vào 4 đặc điểm được hiển thị phía dưới.
a. Dataset :
Ta sẽ sử dụng tập dữ liệu iris chứa 3 lớp, mỗi lớp gồm 50 trường hợp, trong đó mỗi lớp nhắc đến tới 1 loại cây diên vĩ. Mỗi cá thể có 4 đặc điểm là chiều dài đài hoa, chiều rộng đài hoa, chiều dài cánh hoa và chiều rộng cánh hoa. Bộ phân loại SVM để dự đoán loại cây diên vĩ dựa vào 4 đặc điểm được hiển thị phía dưới.
b. Kernel : 
Nó là 1 kỹ thuật được dùng do SVM. Về căn bản đây chính là những hàm lấy không gian đầu vào có chiều thấp và biến đổi nó thành không gian có chiều cao hơn. Nó chuyển đổi vấn đề không thể phân tách thành vấn đề có thể phân tách. Hàm nhân có thể là 1 hàm bất kỳ trong số các hàm tuyến tính, đa thức, rbf và sigmoid. Trong ví dụ này, ta sẽ sử dụng nhân tuyến tính.
import pandas as pd
import numpy as np
from sklearn import svm, datasets
import matplotlib.pyplot as plt
Load dữ liệu enter :
iris = datasets.load_iris()
X = iris.knowledge[:, :2]
y = iris.goal
Ta sẽ vẽ các ranh giới help vector machine với dữ liệu gốc. Chúng tôi đang tạo 1 lưới để lập mưu.
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min)/100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
X_plot = np.c_[xx.ravel(), yy.ravel()]
C = 1.0
Tạo SVM classifier :
Svc_classifier = svm_classifier.SVC(kernel='linear', 
C=C, decision_function_shape = 'ovr').match(X, y)
Z = svc_classifier.predict(X_plot)
Z = Z.reshape(xx.form)
plt.determine(figsize = (15, 5))
plt.subplot(121)
plt.contourf(xx, yy, Z, cmap = plt.cm.tab10, alpha = 0.3)
plt.scatter(X[:, 0], X[:, 1], c = y, cmap = plt.cm.Set1)
plt.xlabel('Sepal size')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('SVC with linear kernel')

admin

Leave a Reply

Your email address will not be published. Required fields are marked *