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

柳随风
发布于 2020-9-4 13:14
浏览
0收藏
  • 背景
  • 原理
  • 适用场景
  • 案例说明

 

背景

 

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

  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_iris
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score

# 鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# K近邻和逻辑回归对比,交叉验证取10折
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=20)
print(cross_val_score(knn, X, y, cv=10, scoring='accuracy').mean())

# 交叉验证同样取10折
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
print(cross_val_score(logreg, X, y, cv=10, scoring='accuracy').mean())
0.9800000000000001
0.9733333333333334

 

分类
收藏
回复
举报
回复
    相关推荐