Phân loại - Giới thiệu
Giới thiệu về phân loại
Phân loại có thể được định nghĩa là quá trình dự đoán lớp hoặc loại từ các giá trị quan sát hoặc các điểm dữ liệu đã cho. Đầu ra được phân loại có thể có dạng như “Đen” hoặc “Trắng” hoặc “thư rác” hoặc “không có thư rác”.
Về mặt toán học, phân loại là nhiệm vụ xấp xỉ một hàm ánh xạ (f) từ biến đầu vào (X) đến biến đầu ra (Y). Về cơ bản, nó thuộc về học máy có giám sát, trong đó các mục tiêu cũng được cung cấp cùng với tập dữ liệu đầu vào.
Một ví dụ về vấn đề phân loại có thể là phát hiện thư rác trong email. Chỉ có thể có hai loại đầu ra, "thư rác" và "không có thư rác"; do đó đây là phân loại kiểu nhị phân.
Để thực hiện phân loại này, trước tiên chúng ta cần đào tạo trình phân loại. Đối với ví dụ này, email "spam" và "không spam" sẽ được sử dụng làm dữ liệu đào tạo. Sau khi huấn luyện thành công bộ phân loại, nó có thể được sử dụng để phát hiện một email không xác định.
Các loại người học trong phân loại
Chúng tôi có hai loại người học tương ứng với các vấn đề phân loại -
Người học lười biếng
Như tên gọi cho thấy, những người học như vậy sẽ đợi dữ liệu kiểm tra xuất hiện sau khi lưu trữ dữ liệu đào tạo. Việc phân loại chỉ được thực hiện sau khi nhận được dữ liệu thử nghiệm. Họ dành ít thời gian hơn cho việc đào tạo nhưng nhiều thời gian hơn cho việc dự đoán. Ví dụ về những người lười học là K-láng giềng gần nhất và suy luận dựa trên tình huống.
Người học háo hức
Ngược lại với những người lười học, những người ham học hỏi xây dựng mô hình phân loại mà không cần đợi dữ liệu kiểm tra xuất hiện sau khi lưu trữ dữ liệu đào tạo. Họ dành nhiều thời gian hơn cho việc đào tạo nhưng ít thời gian hơn cho việc dự đoán. Các ví dụ về những người ham học hỏi là Cây quyết định, Vịnh Naïve và Mạng thần kinh nhân tạo (ANN).
Xây dựng bộ phân loại bằng Python
Scikit-learning, một thư viện Python dành cho học máy có thể được sử dụng để xây dựng bộ phân loại bằng Python. Các bước để xây dựng một trình phân loại trong Python như sau:
Bước 1: Nhập gói python cần thiết
Để xây dựng bộ phân loại bằng scikit-learning, chúng ta cần nhập nó. Chúng tôi có thể nhập nó bằng cách sử dụng tập lệnh sau:
import sklearn
Bước 2: Nhập tập dữ liệu
Sau khi nhập gói cần thiết, chúng ta cần một tập dữ liệu để xây dựng mô hình dự đoán phân loại. Chúng tôi có thể nhập nó từ tập dữ liệu sklearn hoặc có thể sử dụng tập dữ liệu khác theo yêu cầu của chúng tôi. Chúng tôi sẽ sử dụng Cơ sở dữ liệu chẩn đoán ung thư vú Wisconsin của sklearn. Chúng tôi có thể nhập nó với sự trợ giúp của tập lệnh sau:
from sklearn.datasets import load_breast_cancer
Tập lệnh sau sẽ tải tập dữ liệu;
data = load_breast_cancer()
Chúng tôi cũng cần tổ chức dữ liệu và nó có thể được thực hiện với sự trợ giúp của các tập lệnh sau:
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']
Lệnh sau sẽ in tên của nhãn, 'malignant'và'benign'trong trường hợp cơ sở dữ liệu của chúng tôi.
print(label_names)
Đầu ra của lệnh trên là tên của các nhãn -
['malignant' 'benign']
Các nhãn này được ánh xạ tới các giá trị nhị phân 0 và 1. Malignant ung thư được biểu thị bằng 0 và Benign ung thư được đại diện bởi 1.
Tên đặc điểm và giá trị đặc điểm của các nhãn này có thể được nhìn thấy với sự trợ giúp của các lệnh sau:
print(feature_names[0])
Đầu ra của lệnh trên là tên của các tính năng cho nhãn 0 tức là Malignant ung thư -
mean radius
Tương tự, tên của các tính năng cho nhãn có thể được tạo ra như sau:
print(feature_names[1])
Đầu ra của lệnh trên là tên của các tính năng cho nhãn 1 tức là Benign ung thư -
mean texture
Chúng ta có thể in các tính năng cho các nhãn này với sự trợ giúp của lệnh sau:
print(features[0])
Điều này sẽ cho kết quả sau:
[
1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
4.601e-01 1.189e-01
]
Chúng ta có thể in các tính năng cho các nhãn này với sự trợ giúp của lệnh sau:
print(features[1])
Điều này sẽ cho kết quả sau:
[
2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
2.750e-01 8.902e-02
]
Bước 3: Tổ chức dữ liệu thành các bộ đào tạo và kiểm tra
Khi chúng tôi cần kiểm tra mô hình của mình trên dữ liệu không nhìn thấy, chúng tôi sẽ chia tập dữ liệu của mình thành hai phần: tập huấn luyện và tập thử nghiệm. Chúng ta có thể sử dụng hàm train_test_split () của gói python sklearn để chia dữ liệu thành các bộ. Lệnh sau sẽ nhập hàm:
from sklearn.model_selection import train_test_split
Bây giờ, lệnh tiếp theo sẽ chia dữ liệu thành dữ liệu đào tạo và kiểm tra. Trong ví dụ này, chúng tôi đang sử dụng việc lấy 40% dữ liệu cho mục đích thử nghiệm và 60% dữ liệu cho mục đích đào tạo -
train, test, train_labels, test_labels = train_test_split(
features,labels,test_size = 0.40, random_state = 42
)
Bước 4: Đánh giá mô hình
Sau khi phân chia dữ liệu thành đào tạo và thử nghiệm, chúng ta cần xây dựng mô hình. Chúng tôi sẽ sử dụng thuật toán Naïve Bayes cho mục đích này. Các lệnh sau sẽ nhập mô-đun GaussianNB:
from sklearn.naive_bayes import GaussianNB
Bây giờ, khởi tạo mô hình như sau:
gnb = GaussianNB()
Tiếp theo, với sự trợ giúp của lệnh sau, chúng ta có thể huấn luyện mô hình:
model = gnb.fit(train, train_labels)
Bây giờ, cho mục đích đánh giá, chúng tôi cần đưa ra dự đoán. Nó có thể được thực hiện bằng cách sử dụng hàm dự đoán () như sau:
preds = gnb.predict(test)
print(preds)
Điều này sẽ cho kết quả sau:
[
1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1
1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0
0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1
1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0
1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0
1
]
Chuỗi số 0 và 1 ở trên ở đầu ra là các giá trị dự đoán cho Malignant và Benign các lớp khối u.
Bước 5: Tìm độ chính xác
Chúng ta có thể tìm thấy độ chính xác của việc xây dựng mô hình ở bước trước bằng cách so sánh hai mảng là test_labels và preds. Chúng tôi 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ả trên cho thấy trình phân loại NaïveBayes chính xác 95,17%.
Số liệu đánh giá phân loại
Công việc vẫn chưa hoàn thành ngay cả khi bạn đã hoàn thành việc triển khai ứng dụng hoặc mô hình Máy học của mình. Chúng ta phải tìm hiểu xem mô hình của mình có hiệu quả không? Có thể có các số liệu đánh giá khác nhau, nhưng chúng ta phải lựa chọn cẩn thận vì việc lựa chọn số liệu ảnh hưởng đến cách đo lường và so sánh hiệu suất của thuật toán học máy.
Sau đây là một số chỉ số đánh giá phân loại quan trọng mà bạn có thể chọn dựa trên tập dữ liệu và loại vấn đề của mình -
Ma trận hỗn loạn
Đây là cách dễ nhất để đo lường hiệu suất của một bài toán phân loại trong đó kết quả đầu ra có thể là hai hoặc nhiều loại lớp. Ma trận nhầm lẫn không là gì ngoài một bảng có hai chiều viz. “Thực tế” và “Dự đoán” và hơn nữa, cả hai thứ nguyên đều có “Khẳng định thật (TP)”, “Phủ định thật (TN)”, “Khẳng định sai (FP)”, “Phủ định giả (FN)” như được hiển thị bên dưới -
Giải thích các thuật ngữ liên quan đến ma trận nhầm lẫn như sau:
True Positives (TP) - Đó là trường hợp khi cả lớp thực tế và lớp dự đoán của điểm dữ liệu là 1.
True Negatives (TN) - Đó là trường hợp khi cả lớp thực tế và lớp dự đoán của điểm dữ liệu là 0.
False Positives (FP) - Trường hợp lớp điểm dữ liệu thực tế là 0 và lớp điểm dữ liệu dự đoán là 1.
False Negatives (FN) - Trường hợp lớp điểm dữ liệu thực tế là 1 & lớp điểm dữ liệu dự đoán là 0.
Chúng ta có thể tìm thấy ma trận nhầm lẫn với sự trợ giúp của hàm mess_matrix () của sklearn. Với sự trợ giúp của tập lệnh sau, chúng ta có thể tìm thấy ma trận nhầm lẫn của bộ phân loại nhị phân được xây dựng ở trên:
from sklearn.metrics import confusion_matrix
Đầu ra
[
[ 73 7]
[ 4 144]
]
Sự chính xác
Nó có thể được định nghĩa là số dự đoán đúng được thực hiện bởi mô hình ML của chúng tôi. Chúng ta có thể dễ dàng tính toán nó bằng ma trận nhầm lẫn với sự trợ giúp của công thức sau:
$$ = \ frac {+} {+++} $$Đối với bộ phân loại nhị phân đã xây dựng ở trên, TP + TN = 73 + 144 = 217 và TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228.
Do đó, Độ chính xác = 217/288 = 0,951754385965, giống như chúng tôi đã tính sau khi tạo bộ phân loại nhị phân.
Độ chính xác
Độ chính xác, được sử dụng trong truy xuất tài liệu, có thể được định nghĩa là số lượng tài liệu chính xác được trả về bởi mô hình ML của chúng tôi. Chúng ta có thể dễ dàng tính toán nó bằng ma trận nhầm lẫn với sự trợ giúp của công thức sau:
$$ = \ frac {} {+ FP} $$Đối với bộ phân loại nhị phân được xây dựng ở trên, TP = 73 và TP + FP = 73 + 7 = 80.
Do đó, Độ chính xác = 73/80 = 0,915
Nhớ lại hoặc độ nhạy
Thu hồi có thể được định nghĩa là số lượng dương tính được trả về bởi mô hình ML của chúng tôi. Chúng ta có thể dễ dàng tính toán nó bằng ma trận nhầm lẫn với sự trợ giúp của công thức sau:
$$ = \ frac {} {+ FN} $$Đối với bộ phân loại nhị phân được xây dựng ở trên, TP = 73 và TP + FN = 73 + 4 = 77.
Do đó, Độ chính xác = 73/77 = 0,94805
Tính đặc hiệu
Tính cụ thể, trái ngược với thu hồi, có thể được định nghĩa là số lượng các phủ định được trả về bởi mô hình ML của chúng tôi. Chúng ta có thể dễ dàng tính toán nó bằng ma trận nhầm lẫn với sự trợ giúp của công thức sau:
$$ = \ frac {N} {N + FP} $$Đối với bộ phân loại nhị phân được xây dựng ở trên, TN = 144 và TN + FP = 144 + 7 = 151.
Do đó, Độ chính xác = 144/151 = 0,95364
Các thuật toán phân loại ML khác nhau
Sau đây là một số thuật toán phân loại ML quan trọng:
Hồi quy logistic
Máy vectơ hỗ trợ (SVM)
Cây quyết định
Naïve Bayes
Rừng ngẫu nhiên
Chúng ta sẽ thảo luận chi tiết về tất cả các thuật toán phân loại này trong các chương tiếp theo.
Các ứng dụng
Một số ứng dụng quan trọng nhất của thuật toán phân loại như sau:
Nhận dạng giọng nói
Nhận dang chu Viet
Nhận dạng sinh trắc học
Phân loại tài liệu