13 KiB
Bộ phân loại ẩm thực 2
Trong bài học phân loại thứ hai này, bạn sẽ khám phá thêm các cách để phân loại dữ liệu số. Bạn cũng sẽ tìm hiểu về hậu quả của việc chọn một bộ phân loại này thay vì bộ phân loại khác.
Câu hỏi trước bài giảng
Điều kiện tiên quyết
Chúng tôi giả định rằng bạn đã hoàn thành các bài học trước và có một tập dữ liệu đã được làm sạch trong thư mục data
của bạn, được gọi là cleaned_cuisines.csv trong thư mục gốc của bài học gồm 4 phần này.
Chuẩn bị
Chúng tôi đã tải tệp notebook.ipynb của bạn với tập dữ liệu đã được làm sạch và đã chia nó thành các dataframe X và y, sẵn sàng cho quá trình xây dựng mô hình.
Bản đồ phân loại
Trước đây, bạn đã tìm hiểu về các tùy chọn khác nhau khi phân loại dữ liệu bằng bảng cheat sheet của Microsoft. Scikit-learn cung cấp một bảng cheat sheet tương tự nhưng chi tiết hơn, giúp bạn thu hẹp các bộ ước lượng (một thuật ngữ khác cho bộ phân loại):
Mẹo: truy cập bản đồ này trực tuyến và nhấp vào các đường dẫn để đọc tài liệu.
Kế hoạch
Bản đồ này rất hữu ích khi bạn đã hiểu rõ về dữ liệu của mình, vì bạn có thể 'đi bộ' dọc theo các đường dẫn để đưa ra quyết định:
- Chúng ta có >50 mẫu
- Chúng ta muốn dự đoán một danh mục
- Chúng ta có dữ liệu được gắn nhãn
- Chúng ta có ít hơn 100K mẫu
- ✨ Chúng ta có thể chọn Linear SVC
- Nếu điều đó không hiệu quả, vì chúng ta có dữ liệu số
- Chúng ta có thể thử ✨ KNeighbors Classifier
- Nếu điều đó không hiệu quả, thử ✨ SVC và ✨ Ensemble Classifiers
- Chúng ta có thể thử ✨ KNeighbors Classifier
Đây là một lộ trình rất hữu ích để làm theo.
Bài tập - chia dữ liệu
Theo lộ trình này, chúng ta nên bắt đầu bằng cách nhập một số thư viện cần thiết.
-
Nhập các thư viện cần thiết:
from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve import numpy as np
-
Chia dữ liệu huấn luyện và kiểm tra:
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
Bộ phân loại Linear SVC
Support-Vector clustering (SVC) là một nhánh của gia đình các kỹ thuật máy học Support-Vector machines (tìm hiểu thêm về chúng bên dưới). Trong phương pháp này, bạn có thể chọn một 'kernel' để quyết định cách phân cụm các nhãn. Tham số 'C' đề cập đến 'regularization', điều chỉnh ảnh hưởng của các tham số. Kernel có thể là một trong nhiều loại; ở đây chúng ta đặt nó là 'linear' để đảm bảo rằng chúng ta sử dụng Linear SVC. Xác suất mặc định là 'false'; ở đây chúng ta đặt nó là 'true' để thu thập các ước tính xác suất. Chúng ta đặt random state là '0' để xáo trộn dữ liệu nhằm thu được xác suất.
Bài tập - áp dụng Linear SVC
Bắt đầu bằng cách tạo một mảng các bộ phân loại. Bạn sẽ thêm dần vào mảng này khi chúng ta thử nghiệm.
-
Bắt đầu với Linear SVC:
C = 10 # Create different classifiers. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
Huấn luyện mô hình của bạn bằng Linear SVC và in ra báo cáo:
n_classifiers = len(classifiers) for index, (name, classifier) in enumerate(classifiers.items()): classifier.fit(X_train, np.ravel(y_train)) y_pred = classifier.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) print(classification_report(y_test,y_pred))
Kết quả khá tốt:
Accuracy (train) for Linear SVC: 78.6% precision recall f1-score support chinese 0.71 0.67 0.69 242 indian 0.88 0.86 0.87 234 japanese 0.79 0.74 0.76 254 korean 0.85 0.81 0.83 242 thai 0.71 0.86 0.78 227 accuracy 0.79 1199 macro avg 0.79 0.79 0.79 1199 weighted avg 0.79 0.79 0.79 1199
Bộ phân loại K-Neighbors
K-Neighbors là một phần của gia đình các phương pháp máy học "neighbors", có thể được sử dụng cho cả học có giám sát và không giám sát. Trong phương pháp này, một số điểm được xác định trước và dữ liệu được thu thập xung quanh các điểm này để dự đoán các nhãn tổng quát cho dữ liệu.
Bài tập - áp dụng bộ phân loại K-Neighbors
Bộ phân loại trước đó khá tốt và hoạt động tốt với dữ liệu, nhưng có thể chúng ta có thể đạt được độ chính xác tốt hơn. Thử bộ phân loại K-Neighbors.
-
Thêm một dòng vào mảng bộ phân loại của bạn (thêm dấu phẩy sau mục Linear SVC):
'KNN classifier': KNeighborsClassifier(C),
Kết quả hơi kém hơn:
Accuracy (train) for KNN classifier: 73.8% precision recall f1-score support chinese 0.64 0.67 0.66 242 indian 0.86 0.78 0.82 234 japanese 0.66 0.83 0.74 254 korean 0.94 0.58 0.72 242 thai 0.71 0.82 0.76 227 accuracy 0.74 1199 macro avg 0.76 0.74 0.74 1199 weighted avg 0.76 0.74 0.74 1199
✅ Tìm hiểu về K-Neighbors
Bộ phân loại Support Vector
Bộ phân loại Support-Vector là một phần của gia đình Support-Vector Machine các phương pháp máy học được sử dụng cho các nhiệm vụ phân loại và hồi quy. SVMs "ánh xạ các ví dụ huấn luyện thành các điểm trong không gian" để tối đa hóa khoảng cách giữa hai danh mục. Dữ liệu tiếp theo được ánh xạ vào không gian này để dự đoán danh mục của chúng.
Bài tập - áp dụng bộ phân loại Support Vector
Hãy thử đạt độ chính xác tốt hơn một chút với bộ phân loại Support Vector.
-
Thêm dấu phẩy sau mục K-Neighbors, sau đó thêm dòng này:
'SVC': SVC(),
Kết quả khá tốt!
Accuracy (train) for SVC: 83.2% precision recall f1-score support chinese 0.79 0.74 0.76 242 indian 0.88 0.90 0.89 234 japanese 0.87 0.81 0.84 254 korean 0.91 0.82 0.86 242 thai 0.74 0.90 0.81 227 accuracy 0.83 1199 macro avg 0.84 0.83 0.83 1199 weighted avg 0.84 0.83 0.83 1199
✅ Tìm hiểu về Support-Vectors
Bộ phân loại Ensemble
Hãy đi theo lộ trình đến cuối cùng, mặc dù thử nghiệm trước đó khá tốt. Hãy thử một số bộ phân loại 'Ensemble', cụ thể là Random Forest và AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)
Kết quả rất tốt, đặc biệt là với Random Forest:
Accuracy (train) for RFST: 84.5%
precision recall f1-score support
chinese 0.80 0.77 0.78 242
indian 0.89 0.92 0.90 234
japanese 0.86 0.84 0.85 254
korean 0.88 0.83 0.85 242
thai 0.80 0.87 0.83 227
accuracy 0.84 1199
macro avg 0.85 0.85 0.84 1199
weighted avg 0.85 0.84 0.84 1199
Accuracy (train) for ADA: 72.4%
precision recall f1-score support
chinese 0.64 0.49 0.56 242
indian 0.91 0.83 0.87 234
japanese 0.68 0.69 0.69 254
korean 0.73 0.79 0.76 242
thai 0.67 0.83 0.74 227
accuracy 0.72 1199
macro avg 0.73 0.73 0.72 1199
weighted avg 0.73 0.72 0.72 1199
✅ Tìm hiểu về Ensemble Classifiers
Phương pháp máy học này "kết hợp các dự đoán của một số bộ ước lượng cơ bản" để cải thiện chất lượng mô hình. Trong ví dụ của chúng ta, chúng ta đã sử dụng Random Trees và AdaBoost.
-
Random Forest, một phương pháp trung bình, xây dựng một 'rừng' các 'cây quyết định' được thêm ngẫu nhiên để tránh overfitting. Tham số n_estimators được đặt là số lượng cây.
-
AdaBoost khớp một bộ phân loại với tập dữ liệu và sau đó khớp các bản sao của bộ phân loại đó với cùng tập dữ liệu. Nó tập trung vào trọng số của các mục được phân loại sai và điều chỉnh khớp cho bộ phân loại tiếp theo để sửa lỗi.
🚀Thử thách
Mỗi kỹ thuật này có một số lượng lớn các tham số mà bạn có thể điều chỉnh. Nghiên cứu các tham số mặc định của từng kỹ thuật và suy nghĩ về ý nghĩa của việc điều chỉnh các tham số này đối với chất lượng mô hình.
Câu hỏi sau bài giảng
Ôn tập & Tự học
Có rất nhiều thuật ngữ chuyên ngành trong các bài học này, vì vậy hãy dành một chút thời gian để xem lại danh sách này các thuật ngữ hữu ích!
Bài tập
Tuyên bố miễn trừ trách nhiệm:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.