写点什么

数据挖掘|cross_val_score 交叉验证使用

用户头像
黄大路
关注
发布于: 2020 年 05 月 09 日
数据挖掘|cross_val_score交叉验证使用
  • 背景

  • 原理

  • 适用场景

  • 案例说明

背景


通过模型验证结果,根据结果来选择最合适的模型。特别是对于监督学习而言,会希望好的模型对未知数据处理有很强的泛化能力。目前模型常用的几种方式。

  1. 用训练准确度,也就是全部数据进行训练和测试。这种方法可能会导致模型过拟合;

  2. 用测试准确度,可以有效避免过拟合,也是最常用的方式。具体是将所有数据分成训练集和测试集两部分,用训练集进行模型训练,得到的模型再用测试集来衡量模型的预测表现能力。测试准确度的缺点是其样本准确度是一个高方差估计。样本准确度依赖不同的测试集,每次测试集结果是不同的,结果呈现是一组低偏差,高方差数据;

  3. 交叉验证。也叫 K 折交叉验证,是在测试准确度的基础上,确定把训练集、测试集分成 K 次(K 取决于数据量大小或者个人经验),然后取结果平均值。

原理


  1. 将数据集平均分割成 K 个等份;

  2. 使用 1 份数据作为测试数据,其余作为训练数据;

  3. 计算测试集准确率;

  4. 使用不同的测试集,重复 2、3 步骤;

  5. 测试集准确率取平均值,作为对未知数据预测准确率的估计。


注意:

  1. K = 10 是常规建议,如上面所说,K 取决于数据量大小、个人经验、分析目的。

  2. 对于分类问题,应该使用分层抽样(stratified sampling)来生成数据,保证正负例的比例在训练集和测试集中的比例相同。

适用场景


在模型选择、参数选择、交叉验证的场景下可以使用交叉验证。


案例说明


使用鸢尾花数据集,KNN 和 logistic 回归模型进行模型的比较和选择。


from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.model_selection import cross_val_score
# 鸢尾花数据集iris = load_iris()X = iris.datay = iris.target
# K近邻和逻辑回归对比,交叉验证取10折from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=20)print(cross_val_score(knn, X, y, cv=10, scoring='accuracy').mean())
# 交叉验证同样取10折from sklearn.linear_model import LogisticRegressionlogreg = LogisticRegression()print(cross_val_score(logreg, X, y, cv=10, scoring='accuracy').mean())
复制代码


0.98000000000000010.9733333333333334
复制代码


发布于: 2020 年 05 月 09 日阅读数: 74
用户头像

黄大路

关注

公众号:Python面面观 2019.07.27 加入

标签:产品经理、数据挖掘

评论

发布
暂无评论
数据挖掘|cross_val_score交叉验证使用