在這第二堂分類課程中,您將探索更多分類數值資料的方法。您也將了解選擇不同分類器可能帶來的影響。
我們假設您已完成前面的課程,並在您的 data 資料夾中擁有一個清理過的資料集,檔名為 cleaned_cuisines.csv,位於此 4 課程資料夾的根目錄。
我們已經將您的 notebook.ipynb 檔案載入清理過的資料集,並將其分割成 X 和 y 兩個資料框,準備進行模型建立流程。
先前,您已學習過使用 Microsoft 的作弊表來分類資料的各種選項。Scikit-learn 提供了類似但更細緻的作弊表,可協助您進一步縮小估計器(分類器)的選擇範圍:
提示: 線上檢視此地圖 並點擊路徑以閱讀文件。
此地圖在您對資料有明確理解後非常有幫助,您可以「沿著路徑走」以做決策:
- 我們有超過 50 筆樣本
- 我們想預測一個類別
- 我們有標記資料
- 我們小於 10 萬筆樣本
- ✨ 可以選擇 Linear SVC
- 若此方法無效,因為我們有數值資料
- 可以嘗試 ✨ KNeighbors Classifier
- 若此方法無效,嘗試 ✨ SVC 和 ✨ Ensemble Classifiers
- 可以嘗試 ✨ KNeighbors Classifier
這是一條非常有幫助的路徑。
依照這路徑,我們應先匯入要用的函式庫。
-
匯入所需函式庫:
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
-
分割您的訓練與測試資料:
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
支持向量分群 (SVC) 是支持向量機器系列機器學習技術的子集合(以下可了解更多)。此方法中,您可以選擇一個「核函數」來決定如何分群標籤。'C' 參數指的是「正則化」,控制參數的影響力。核函數可為多種選項之一;這裡我們設定為 'linear' 以使用線性 SVC。預設 probability 為 'false',這裡我們設定為 'true' 以收集概率估計。我們設定 random state 為 '0' 以洗牌資料取得概率。
先建立一個分類器陣列。在測試的過程中您將漸進增加該陣列。
-
先從 Linear SVC 開始:
C = 10 # 建立不同的分類器。 classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
使用 Linear SVC 訓練模型並輸出報告:
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))
結果相當不錯:
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
K-Neighbors 是「鄰居」系列機器學習方法的子集合,可用於監督式與非監督式學習。此方法預先建立了一定數量的點,並將資料聚集於這些點附近,以便為資料預測一般化的標籤。
前一個分類器效果很好並且適合資料,但也許我們能得到更佳的準確率。試試 K-Neighbors 分類器。
-
在您的分類器陣列中新增一行(在 Linear SVC 項目後加逗號):
'KNN classifier': KNeighborsClassifier(C),
結果稍微差一點:
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✅ 了解 K-Neighbors
支持向量分類器隸屬於支持向量機器系列機器學習方法,適用於分類和回歸任務。SVM「將訓練範例映射到空間中的點」,以最大化兩個類別之距離。隨後的資料被映射到此空間中,以便預測它們的類別。
讓我們嘗試使用支持向量分類器尋求更好的準確率。
-
在 K-Neighbors 項目後加逗號,然後新增這行:
'SVC': SVC(),
結果相當不錯!
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✅ 了解 支持向量
讓我們走到最終路徑,雖然先前測試已經很好。我們來嘗試「集成分類器」,特別是隨機森林和 AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)結果非常好,尤其是隨機森林:
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
✅ 了解 集成分類器
這種機器學習方法「結合多個基礎估計器的預測」以提升模型品質。在本例中,我們使用隨機樹和 AdaBoost。
-
隨機森林,為平均方法,構建「決策樹森林」,並注入隨機性以避免過擬合。n_estimators 參數設定為樹的數量。
-
AdaBoost 對資料集擬合一個分類器,然後擬合同樣分類器的多個副本。它會聚焦於錯誤分類項目的權重,並調整下一個分類器的擬合以做修正。
每種技術都有大量可以調整的參數。研究各自的預設參數,並思考調整這些參數會對模型品質有何影響。
這些課程中有很多行話,花點時間複習此列表的實用術語!
免責聲明:
本文件係使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於精確翻譯,但請注意自動翻譯可能包含錯誤或不準確之處。原始語言版本之文件應視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。本公司不對因使用本翻譯文件所導致之任何誤解或誤釋負責。
