问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/happyhorizion/article/details/89469948

以监督学习的众多算法为例,不管是分类还是回归,都有很多不同的算法模型,在不同的问题中,这些算法模型的表现是不同的。如何对模型的表行进行评估和改进呢?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%的正确率,模型的性能还是比较好的,但是具体看每折交叉验

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号