机器学习模型评估与改进: 交叉验证(cross validation)

交叉验证是一种衡量算法稳定性的统计方法,通过多次数据划分训练模型以提高泛化能力。scikit-learn提供了cross_val_score函数方便进行交叉验证,如5折交叉验证。交叉验证能更公正评价模型,但计算成本高。分层k折交叉验证适用于类别分布不均的数据,避免因数据排列导致的误差。此外,还有Leave-one-out、ShuffleSplit等变体,适应不同场景需求。
摘要由CSDN通过智能技术生成

以监督学习的众多算法为例,不管是分类还是回归,都有很多不同的算法模型,在不同的问题中,这些算法模型的表现是不同的。如何对模型的表行进行评估和改进呢?scikit learn网站给出了这样一个模型评估和改进的流程图:

在这里插入图片描述
首先我们再来看看模型评估的过程,在模型训练时,我们首先可以用scikit learn的model_selection模块train_test_split函数对数据划分,分为训练集合和测试集合。对于验证模型的泛化能力,测试集合至关重要。

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

交叉验证

交叉验证是一种统计学方法,用于衡量算法表现是否稳定。在交叉验证里,数据不是简单按照某个比例分为训练集合和测试集合,而是将数据如下图做多次划分,并且基于这些划分,训练多个机器学习模型。这也就是所谓的k折交叉验证(k-fold cross validation),k通常为5或者10.

以5折交叉验证为例,数据首先被均匀地分为5份(“折”,fold),取其中一份作为测试集合,其他为训练集合,训练一个模型。之后,轮流地选择其中的一折作为测试集合,其他为训练集合,再依次训练模型。

在这里插入图片描述

调用方法

scikit-learn提供了非常简便的方法调用交叉验证。只需要从model_selection模块中加载cross_val_score函数就可以了。以鸢尾花数据集,logistic回归预测为例:

from sklearn.model_selection import cross_val_score 
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
iris = load_iris()
logreg = LogisticRegression()
scores = cross_val_score(logreg, iris.data, iris.target) 
print("Cross-validation scores: {}".format(scores))

通常cross_val_score函数默认是3折交叉验证,运行后输出Cross-validation scores: [ 0.961 0.922 0.958]。 可以在cross_val_score() 函数中修改默认设置,例如改成5折交叉验证:

scores = cross_val_score(logreg, iris.data, iris.target, cv=5)

正确率为[ 1. 0.967 0.933 0.9 1. ]。平均来说,交叉验证的正确率是我们关心的指标,可以用scores.mean()得到,约为0.96。 96%的正确率,模型的性能还是比较好的,但是具体看每折交叉验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值