使用交叉验证评估模型

这篇具有很好参考价值的文章主要介绍了使用交叉验证评估模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用交叉验证评估模型

描述

交叉验证(cross-validation)是一种常用的模型评估方法,在交叉验证中,数据被多次划分(多个训练集和测试集),在多个训练集和测试集上训练模型并评估。相对于单次划分训练集和测试集来说,交叉验证能够更准确、更全面地评估模型的性能。

本任务的主要实践内容:

1、 应用k-折交叉验证(k-fold)

2、 应用留一法交叉验证(leave-one-out)

3、 应用打乱划分交叉验证(shuffle-split)

源码下载

环境

  • 操作系统:Windows10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    scikit-learn	0.24.2
    

分析

任务数据集采用鸢尾花(iris)数据集,使用逻辑回归和K-最近邻创建分类模型,分别练习三种交叉验证方法的使用。

本任务涉及以下环节:

a)k-折交叉验证评估模型

b)留一法交验证评估模型

c)打乱划分交叉验证评估模型

实施

步骤1、使用K-折交叉验证评估模型

from sklearn.model_selection import cross_val_score # 交叉验证函数
from sklearn.datasets import load_iris 
from sklearn.linear_model import LogisticRegression 
 
iris = load_iris() # 加载iris数据集
model = LogisticRegression() # 创建逻辑回归模型

# 交叉验证,参数依次为:模型、数据、数据标签、cv(即折数K)
scores = cross_val_score(model, iris.data, iris.target, cv=3) # cv=3,即3折交叉,输出3个评估成绩
print(scores) # 每次的评估成绩(数组)
print(scores.mean()) # 计算平均成绩

输出结果:

[0.98 0.96 0.98]
0.9733333333333333

说明:

  1. Scikit-learn交叉验证函数为cross_val_score,参数cv表示划分的折数k,通常取值3、5或10。

本例中cv=3,表示将数据集分为3份进行交叉验证,其返回值为3次评估的成绩

  1. 本例中cv=3,表示将数据集分为3份进行交叉验证,其返回值为3次评估的成绩。

步骤2、使用留一法(leave-one-out)交叉验证评估模型

from sklearn.datasets import load_iris
from sklearn.model_selection import LeaveOneOut, cross_val_score
from sklearn.neighbors import KNeighborsClassifier 

iris = load_iris() # 加载数据集
model = KNeighborsClassifier() # 创建模型

loo = LeaveOneOut() # 定义留一法策略,作为cv参数的值
scores = cross_val_score(model, iris.data, iris.target, cv=loo)

print(len(scores)) # 留一法输出150个评估成绩(因为样本数为150)
print(scores.mean()) # 计算平均成绩

输出结果:

150
0.9666666666666667

说明:

1、 留一法交叉验证可以看作是极端情况下的k-折交叉验证。每次选1个样本做测试集、其他样本做训练集进行评估,有多少样本就会评估多少次。

2、 本例中样本数为150,因此交叉验证返回150个结果。

步骤3、使用打乱划分(shuffle-split)交叉验证评估模型

from sklearn.datasets import load_iris
from sklearn.model_selection import ShuffleSplit, cross_val_score
from sklearn.linear_model import LogisticRegression 

iris = load_iris()
model = LogisticRegression()

# 划分5次,每次取100个样本作为训练集,10个样本作为测试集
shuffle_split = ShuffleSplit(train_size=100, test_size=10, n_splits=5) 
scores = cross_val_score(model, iris.data, iris.target, cv=shuffle_split) 
print(scores)
print(scores.mean())

# 除指定样本个数外,还可以指定百分比
# 这里就是划分5次,每次取80%为训练集,20%为测试集
shuffle_split = ShuffleSplit(train_size=0.8, test_size=0.2, n_splits=5) 

输出结果:

[1. 1. 1. 1. 1.]
1.0

说明:

  1. 该方法可以同时指定划分次数和训练集与测试集大小。

  2. 参数说明:

    • n_splits 划分次数
    • train_size 训练集样本数量或比例
    • Test_size 测试集样本数量或比例
  3. 该方法允许只取部分样本参与训练和评估,因此适用于比较大的数据集。文章来源地址https://www.toymoban.com/news/detail-412188.html

到了这里,关于使用交叉验证评估模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包