評估多個模型

使用 scikit-learn 進行監督式學習

George Boorman

Core Curriculum Manager, DataCamp

對症下藥選模型

指導原則

  • 資料集大小
    • 特徵少=模型較簡單、訓練較快
    • 有些模型需要大量資料才會表現好
  • 可解釋性
    • 有些模型較容易說明,利於利害關係人溝通
    • 線性迴歸可解釋性高,係數容易理解
  • 彈性
    • 對資料假設較少,可能提升準確度
    • KNN 較具彈性,不假設線性關係
使用 scikit-learn 進行監督式學習

關鍵在評估指標

  • 迴歸模型表現:

    • RMSE
    • R-squared
  • 分類模型表現:

    • Accuracy
    • 混淆矩陣
    • Precision、Recall、F1-score
    • ROC AUC
  • 先訓練多個模型,再比較其開箱即用的表現

使用 scikit-learn 進行監督式學習

關於特徵縮放的提醒

  • 受縮放影響的模型:
    • KNN
    • Linear Regression(含 Ridge、Lasso)
    • Logistic Regression
    • Artificial Neural Network

 

  • 在評估模型前先對資料做縮放最佳
使用 scikit-learn 進行監督式學習

評估分類模型

import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_score, KFold, train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

X = music.drop("genre", axis=1).values y = music["genre"].values X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
使用 scikit-learn 進行監督式學習

評估分類模型

models = {"Logistic Regression": LogisticRegression(), "KNN": KNeighborsClassifier(), 
         "Decision Tree": DecisionTreeClassifier()}
results = []

for model in models.values():
kf = KFold(n_splits=6, random_state=42, shuffle=True)
cv_results = cross_val_score(model, X_train_scaled, y_train, cv=kf)
results.append(cv_results)
plt.boxplot(results, labels=models.keys()) plt.show()
使用 scikit-learn 進行監督式學習

視覺化結果

各模型(Logistic Regression、KNN、Decision Tree)的準確率盒鬚圖

使用 scikit-learn 進行監督式學習

測試集表現

for name, model in models.items():

model.fit(X_train_scaled, y_train)
test_score = model.score(X_test_scaled, y_test)
print("{} Test Set Accuracy: {}".format(name, test_score))
Logistic Regression Test Set Accuracy: 0.844
KNN Test Set Accuracy: 0.82
Decision Tree Test Set Accuracy: 0.832
使用 scikit-learn 進行監督式學習

一起來練習吧!

使用 scikit-learn 進行監督式學習

Preparing Video For Download...