K折交叉验证
- 目的:
- 选出最为合适的模型超参数的取值,然后将超参数的值作用到模型的创建中。
- 思想:
- 将样本的训练数据交叉的拆分出不同的训练集和验证集,使用交叉拆分出的不同的训练集和验证集分别测试模型的精准度,然后求出精准度的均值就是此次交叉验证的结果。将交叉验证作用到不同的超参数中,选取出精准度最高的超参数作为模型创建的超参数即可!
- 实现思路
- 将数据集平均分割成K个等份
- 使用1份数据作为测试数据,其余作为训练数据
- 计算测试准确率
- 使用不同的测试集,重复2、3步骤
- 对准确率做平均,作为未知数据预测准确率的估计
- API
- from sklearn.model_selection import cross_val_score
- cross_val_score(estimator, X, y, cv)
- estimator:模型对象
- X,y:训练集数据
- cv:折数
- 交叉验证在KNN中的基本使用
- mean()求的是均值
- KNN中的k值为5,不一定是最佳的选择,所以我们可以来进行选择,找到一个最优的k(最优的超参数)
- 使用交叉验证和学习曲线,找寻最优的超参数
- 交叉验证也可以帮助我们进行模型选择,以下是一组例子,分别使用iris数据,KNN和logistic回归模型的比较和选择。
- 交叉验证也可以帮助我们进行模型选择,以下是一组例子,分别使用iris数据,KNN和logistic回归模型的比较和选择。
K-Fold和cross_val_score
- Scikit中提供了K-Fold的API
- n-split就是折数
- shuffle指是否对数据洗牌
- random_state为随机种子,固定随机性
- Scikit中提取带K-Fold接口的交叉验证接口sklearn.model_selection.cross_validate,但是该接口没有数据shuffle功能,所以一般结合Kfold一起使用。如果Train数据在分组前已经经过了shuffle处理,比如使用train_test_split分组,那就可以直接使用cross_val_score接口