本文主题:使用 train/test split 进行模型评估的缺点
K-fold cross-validation 如何克服这些缺点
K-fold cross-validation 如何用于参数调优以及选择模型和特征
K-fold cross-validation 可能的改进措施
1. 使用 train/test split 进行模型评估的缺点
Train/test split 是将原始数据集划分为训练集/测试集,避免了为了追求高准确率而在训练集上产生过拟合,从而使得模型在样本外的数据上预测准确率高。
但是,划分出训练集/测试集的不同会使得模型的准确率产生明显的变化。以上一篇 iris 为例:
# 使用 train/test split, random_state=4
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4)
# 评估模型的分类准确率
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
print(knn.score(X_test, y_test))
```
0.973684210526
```
# 改变 random_state=3
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=3)
# 评估模型的分类准确率
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
print(knn.score(X_test, y_test))
```
0.947368421053