评估多个模型

使用 scikit-learn 的监督学习

George Boorman

Core Curriculum Manager, DataCamp

不同问题用不同模型

一些指导原则

  • 数据集规模
    • 特征更少 = 模型更简单,训练更快
    • 有些模型需大量数据才能表现良好
  • 可解释性
    • 有些模型更易解释,这对相关方很重要
    • 线性回归可解释性高,可理解其系数
  • 灵活性
    • 更少假设,可能提升准确率
    • KNN 更灵活,不假设线性关系
使用 scikit-learn 的监督学习

关键在指标

  • 回归模型评估:

    • RMSE
    • R-squared
  • 分类模型评估:

    • 准确率
    • 混淆矩阵
    • 精确率、召回率、F1 值
    • ROC AUC
  • 训练多个模型并直接比较其表现

使用 scikit-learn 的监督学习

关于缩放的提示

  • 受缩放影响的模型:
    • KNN
    • 线性回归(含 Ridge、Lasso)
    • 逻辑回归
    • 人工神经网络

 

  • 评估前最好先对数据做缩放
使用 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...