模型的调优方法--交叉验证及案例

 

交叉验证也称为循环估计,是一种统计学上将数据样本切割成较小子集的实用方法,主要应用于数据建模。

交叉验证基本思想:将原始数据进行分组,一部分作为训练集,另一部分作为验证集,首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型,以此作为评价分类器的性能指标,用交叉验证的目的是为了得到可靠稳定的模型。

交叉验证的常见方法如下:

Holdout验证

将原始数据随机分为两组,一组作为训练集,一组作为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率,以此作为分类器的性能指标。

K折交叉验证

初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次。

留一验证

留一验证指只使用原本样本中的一项来当验证数据,而剩余的则留下当训练数据。这个步骤一直持续到每个样本都被当一次验证数据。事实上,这等同于和K折交叉验证,其中K为原样本个数。

十折交叉验证

十折交叉验证用来测试算法准确性,是常用的测试方法。将数据集分成十分,轮流将其中9份作为训练数据,1份作为测试数据。每次试验都会得出相应的正确率。10次结果的正确率的平均值作为算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为算法的最终准确性估计。

下面结合“鸢尾花”数据集详细介绍交叉验证,代码如下:

#导入相关库

import pandas as pd

from sklearn.svm import SVC

from sklearn.model_selection import cross_val_score

iris = pd.read_csv('iris.csv')

X = iris[['Sepal.Length', 'Sepal.Width', 'Petal.Length','Petal.Width']]

y = iris['Species']

#SVM模型初始化

svm = SVC()

#执行k分割交叉验证

scores = cross_val_score(svm, X, y, cv=8)

print('交叉验证得分: {}'.format(scores))

print('交叉验证得分: {:.3f}+-{:.3f}'.format(scores.mean(), scores.std()))

运行上述代码,输出如下,可以看出交叉验证的得分矩阵、平均分及其标准差。

交叉验证得分: [1. 0.94736842 1. 1. 0.94736842 0.94736842  0.94444444 1.]

交叉验证得分: 0.973+-0.027

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王国平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值