在第二堂分類課中,您將探索更多對數值數據進行分類的方法。您亦會了解選擇不同分類器的影響。
假設您已完成之前的課程,並在本4堂課資料夾根目錄的 data 資料夾中有一個名為 cleaned_cuisines.csv 的已清理數據集。
我們已載入您的 notebook.ipynb 檔案,並將清理後的數據集劃分為 X 和 y 資料框,準備進行模型建構。
之前,您學習了使用 Microsoft 的速查表對數據進行分類的各種選項。Scikit-learn 提供了類似但更細緻的速查表,能進一步協助您篩選估算器(另一種稱呼分類器):
提示:線上瀏覽此地圖 並沿著路徑點擊以閱讀文件。
一旦您對數據有清晰的理解,這張地圖非常有用,因為您可沿著路徑作出決定:
- 我們有超過50個樣本
- 我們想預測一個類別
- 我們有標籤數據
- 我們的樣本少於10萬
- ✨ 我們可以選擇 Linear SVC
- 如果那不起作用,因為我們有數值數據
- 我們可以嘗試 ✨ KNeighbors 分類器
- 如果那也不行,試試 ✨ SVC 和 ✨ 集成分類器
- 我們可以嘗試 ✨ KNeighbors 分類器
這是一條非常實用的路徑。
沿著這條路徑開始,我們應該先導入一些所需的庫。
-
導入必要的庫:
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)是支持向量機器(SVM)機器學習技術家族的一員(稍後會進一步了解)。此方法允許選擇「核函數」來決定如何聚類標籤。「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✅ 學習更多關於 Support-Vectors
讓我們沿路徑走到最後,儘管前面的測試已經相當好。我們試試「集成分類器」,具體為隨機森林和 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 先擬合一個分類器到數據集,然後對同一數據集多次擬合該分類器複製本,著重於錯誤分類項的權重,調整下一個分類器的擬合以修正錯誤。
每種技術都有大量參數可以調整。研究各自的預設參數,並思考調整這些參數對模型品質會有什麼影響。
這些課程用到許多術語,花點時間複習這個詞彙清單吧!
免責聲明:
本文件使用人工智能翻譯服務 Co-op Translator 進行翻譯。雖然我們努力確保準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言版本的文件應視為權威來源。對於重要資訊,建議採用專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或誤譯承擔責任。
