交叉检验(Cross-Validation)详解

Alt
假设我们有一个0-1的分类问题,有两个feature,那么我们将如何判断这个分类模型的优劣呢?

最简单的方法是将我们的数据集划分为训练集和测试集。如上图所示,我们将75%的数据集划分为训练集,并使用训练集训练模型,然后将训练好的模型在剩余的25%的测试集上进行测试。测试集上的正确率的结果相当于在未来那些没有标签的数据上预测的无偏结果。

sklearn包中提供了train_test_split方法对数据集进行快速划分。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
print("accuracy: {:.2f}".format(knn.score(X_test, y_test)))
y_pred = knn.predict(X_test)```

在上面的代码中我们使用了最简单的KNN模型,并指定参数K=1。那么如何选择更合适的参数K呢?在训练集上把不同的K值都试一遍,然后看哪个K值在测试集上表现更好(正确率更高)?

  • 这样做可以选出合适的K值,但是会对正确率有一个过于乐观的估计,也就是说在测试集上过拟合了。
  • 什么是测试集过拟合?简单地说,就是在测试集上尝试的次数太多,模型学习了测试集上的噪声,导致模型不具有可推广性。
from sklearn.datasets import load_breast_cancer
from sklearn
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值