当前位置:   article > 正文

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

3折交叉验证

以监督学习的众多算法为例,不管是分类还是回归,都有很多不同的算法模型,在不同的问题中,这些算法模型的表现是不同的。如何对模型的表行进行评估和改进呢?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)
  • 1

交叉验证

交叉验证是一种统计学方法,用于衡量算法表现是否稳定。在交叉验证里,数据不是简单按照某个比例分为训练集合和测试集合,而是将数据如下图做多次划分,并且基于这些划分,训练多个机器学习模型。这也就是所谓的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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通常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%的正确率,模型的性能还是比较好的,但是具体看每折交叉验

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/911458
推荐阅读
相关标签
  

闽ICP备14008679号