模型评估:cross_val_score 交叉验证使用
背景
通过模型验证结果,根据结果来选择最合适的模型。特别是对于监督学习而言,会希望好的模型对未知数据处理有很强的泛化能力。目前模型常用的几种方式。
- 用训练准确度,也就是全部数据进行训练和测试。这种方法可能会导致模型过拟合;
- 用测试准确度,可以有效避免过拟合,也是最常用的方式。具体是将所有数据分成训练集和测试集两部分,用训练集进行模型训练,得到的模型再用测试集来衡量模型的预测表现能力。测试准确度的缺点是其样本准确度是一个高方差估计。样本准确度依赖不同的测试集,每次测试集结果是不同的,结果呈现是一组低偏差,高方差数据。
- 交叉验证。也叫 K 折交叉验证,是在测试准确度的基础上,确定把训练集、测试集分成 K 次(K 取决于数据量大小或者个人经验),然后取结果平均值。
原理
- 将数据集平均分割成K个等份;
- 使用 1 份数据作为测试数据,其余作为训练数据;
- 计算测试集准确率;
- 使用不同的测试集,重复2、3步骤;
- 测试集准确率取平均值,作为对未知数据预测准确率的估计。
注意:
- K = 10是常规建议,如上面所说,K 取决于数据量大小、个人经验、分析目的。
- 对于分类问题,应该使用分层抽样(stratified sampling)来生成数据,保证正负例的比例在训练集和测试集中的比例相同。
适用场景
在模型选择、参数选择、交叉验证的场景下可以使用交叉验证。
案例说明
使用 iris 数据,KNN 和 logistic 回归模型进行模型的比较和选择。
1 | from sklearn.datasets import load_iris |
1 | 0.9800000000000001 |