Scikit-Learn学习笔记——模型验证与超参数网格搜索

本文介绍了模型验证的重要性,如留出集评估和交叉验证,并探讨了如何通过学习曲线找到偏差和方差的最佳平衡点。此外,文章讲解了Scikit-Learn的验证曲线和使用网格搜索进行超参数调优的方法,帮助找到最优模型。
摘要由CSDN通过智能技术生成

超参数与模型验证

模型验证就是在选择模型和超参数之后,通过对训练数据进行学习,对比模型对已知数据的预测值与实际值的差异。模型验证的正确方法是使用留出集评估模型性能,即先从训练模型中的数据中留出一部分,然后用这部分留出来的数据检验模型性能。

但是,使用留出集使得模型失去了一部分训练机会,解决这个问题的方法是交叉验证,也就是做一组拟合,让数据的每个子集既是训练集,又是验证集。

#使用sklearn API实现交叉验证
#使用k近邻分类器,数据是鸢尾花数据集
from sklearn.datasets import load_iris
from sklearn.cross_validation import cross_val_score
from sklearn.neighbors import KNeighborsClassifier

iris = load_iris()
x = iris.data
y = iris.target
model = KNeighborsClassifier(n_neighbors=1)
cross_val_score(model, x, y, cv=5)

#输出结果
Out[20]: array([0.96666667, 0.96666667, 0.93333333, 0.93333333, 1.        ])

Scikit-Learn为不同的应用场景提供了各种交叉验证方法,都以迭代器形式在corss_validation模块中实现。例如,我们每次只用一个样本做测试,其他样本全用于训练。这种交叉检验类型成为LOO(leave-one-out)交叉验证。

from sklearn.cross_validation import LeaveOneOut
scores = cross_val_score(model, x, y, cv=LeaveOneOut(len(x)))
scores.mean()

#输出结果
0.96
选择最优模型

“最优模型”的问题基本上可以看成是找出偏差方差的平衡点的问题。使用复杂度较低的模型(高偏差)时,训练数据往往欠拟合,说明模型对训练数据和新数据都缺乏预测能力。而使用复杂度较高的模型(高方差)时,训练数据往往过拟合,说明模型对训练数据预测能力强,但是对新数据的预测能力很很差。当使用复杂度适中的模型时,验证曲线得分很高。说明再该模型复杂度条件下,偏差与方差达到均衡状态。

scikit-learn验证曲线
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值