sklearn.KFold「建议收藏」

sklearn.KFold「建议收藏」K折交叉验证:将样本切成K份,每次取其中一份做为测试集,剩余的K-1份做为训练集。在sklearn.model_selection中提供了几种K折交叉验证。生成样本>>>fromsklearn.datasetsimportmake_classification>>>data,target=make_classification(n_…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

简介

K折交叉验证:将样本切成K份,每次取其中一份做为测试集,剩余的K-1份做为训练集。根据训练训练出模型或者假设函数。 把这个模型放到测试集上,得到分类率。计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率。

在sklearn.model_selection 中提供了几种K折交叉验证。

生成样本

>>> from sklearn.datasets import make_classification
>>> data,target=make_classification(n_samples=10)
>>> print(target)
[1 1 0 1 1 0 0 1 0 0]

sklearn.model_selection.KFold

KFold按数据原有的顺序对数据进行分割。可以通过定义shuffle来打乱顺序。

>>> from sklearn.model_selection import KFold
>>> kfold= KFold(n_splits=5,random_state =None)
>>> for train_index,test_index in kfold.split(data,target):
...   print("TRAIN:", train_index, "TEST:", test_index)
...   print("TRAIN_target:", target[train_index].mean(), "TEST_target:", target[test_index].mean())
TRAIN: [2 3 4 5 6 7 8 9] TEST: [0 1]
TRAIN_target: 0.375 TEST_target: 1.0
TRAIN: [0 1 4 5 6 7 8 9] TEST: [2 3]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 3 6 7 8 9] TEST: [4 5]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 3 4 5 8 9] TEST: [6 7]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 3 4 5 6 7] TEST: [8 9]
TRAIN_target: 0.625 TEST_target: 0.0

sklearn.model_selection.StratifiedKFold

StratifiedKFold是KFold的一个变种,目的是保证每一个分层标签的比例和原始样本一致。

>>> from sklearn.model_selection import StratifiedKFold    
>>> stkfold= StratifiedKFold(n_splits=5,random_state =None)
>>> for train_index,test_index in stkfold.split(data,target):
...    print("TRAIN:", train_index, "TEST:", test_index)
...    print("TRAIN_target:", target[train_index].mean(), "TEST_target:", target[test_index].mean())
TRAIN: [1 3 4 5 6 7 8 9] TEST: [0 2]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 2 3 4 6 7 8 9] TEST: [1 5]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 4 5 7 8 9] TEST: [3 6]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 3 5 6 7 9] TEST: [4 8]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 3 4 5 6 8] TEST: [7 9]
TRAIN_target: 0.5 TEST_target: 0.5

sklearn.model_selection.RepeatedKFold

重复n次K-Fold ,每次重复有不同的随机性。

>>> from sklearn.model_selection import RepeatedKFold    
>>> rpkfold= RepeatedKFold(n_splits=5,n_repeats=2,random_state =2652124)
>>> for train_index,test_index in rpkfold.split(data,target):
...    print("TRAIN:", train_index, "TEST:", test_index)
...    print("TRAIN_target:", target[train_index].mean(), "TEST_target:", target[test_index].mean())
TRAIN: [0 1 3 4 5 6 7 9] TEST: [2 8]
TRAIN_target: 0.625 TEST_target: 0.0
TRAIN: [0 2 3 4 5 6 8 9] TEST: [1 7]
TRAIN_target: 0.375 TEST_target: 1.0
TRAIN: [0 1 2 4 5 6 7 8] TEST: [3 9]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [1 2 3 4 5 7 8 9] TEST: [0 6]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 3 6 7 8 9] TEST: [4 5]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 3 4 6 7 8 9] TEST: [2 5]
TRAIN_target: 0.625 TEST_target: 0.0
TRAIN: [0 1 2 3 4 5 8 9] TEST: [6 7]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 5 6 7 8 9] TEST: [3 4]
TRAIN_target: 0.375 TEST_target: 1.0
TRAIN: [0 2 3 4 5 6 7 9] TEST: [1 8]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [1 2 3 4 5 6 7 8] TEST: [0 9]
TRAIN_target: 0.5 TEST_target: 0.5

sklearn.model_selection.GroupKFold

按组对样本进行分层。
同一组不会出现在两个不同的分层中(不同组的数量必须至少等于折的数量)。

>>> import numpy as np
>>> from sklearn.model_selection import GroupKFold    
>>> gpkfold= GroupKFold(n_splits=5)
>>> groups = np.array([0, 0, 1 ,1 ,3 ,4 ,1 ,1 ,2 , 2])
>>> for train_index,test_index in gpkfold.split(data,target,groups):
...    print("TRAIN:", train_index, "TEST:", test_index)
...    print("TRAIN_target:", target[train_index].mean(), "TEST_target:", target[test_index].mean())
TRAIN: [0 1 4 5 8 9] TEST: [2 3 6 7]
TRAIN_target: 0.5 TEST_target: 0.5
TRAIN: [0 1 2 3 4 5 6 7] TEST: [8 9]
TRAIN_target: 0.625 TEST_target: 0.0
TRAIN: [2 3 4 5 6 7 8 9] TEST: [0 1]
TRAIN_target: 0.375 TEST_target: 1.0
TRAIN: [0 1 2 3 4 6 7 8 9] TEST: [5]
TRAIN_target: 0.555555555556 TEST_target: 0.0
TRAIN: [0 1 2 3 5 6 7 8 9] TEST: [4]
TRAIN_target: 0.444444444444 TEST_target: 1.0

结论

建模时,一般是使用KFold和StratifiedKFold。需要完成特殊分群的时,比如按月份划分数据,可以使用GroupKFold 。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191520.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ip addr命令详解_linux more命令详解

    ip addr命令详解_linux more命令详解(我意识到这是一个古老的问题,但谷歌把我带到了这里,因为我试图找出确切的变化和替换以及它们如何不同).我相信替换和更改都用于修改现有地址.考虑:ipaddradd192.168.1.10/32devdummy0这让我:32:dummy0:mtu1500qdiscnoqueuestateUNKNOWNgroupdefaultlink/ether5a:ec:58:4f:…

    2022年7月28日
    18
  • Oracle NUMBER类型细讲

    Oracle NUMBER类型细讲1>.NUMBER类型细讲:Oraclenumberdatatype语法:NUMBER[(precision[,scale])]简称:precision–>p     scale    –>sNUMBER(p,s)范围:1保存数据范围:-1.0e-130保存在机器内部的范围:1~22bytes有效为:从左边第一个不为0的数算起的位数。s的情况:s>0  

    2022年7月24日
    11
  • mysql添加字段的sql语句_mysql增加字段的语句

    mysql添加字段的sql语句_mysql增加字段的语句myesl是一个关系型数据库管理系统,也是目前最流行的管理系统之一,目前网页设计方面对一个系统的使用频率是比较高的,因此想要学会网页设计,那么有关myesl的基础知识以及应用就一定要掌握。而今天我们就来看一看myesl增加字段是如何操作的。mysql增加字段——mysql数据库更新字段语句一、UPDATE:UPDATE的功能是更新表中的数据。这的语法和INSERT的第二种用法相似。必须提供表名以及…

    2025年7月16日
    5
  • ADRC学习笔记(二)

    ADRC学习笔记(二)1.最速跟踪微分器TD它的离散表达式为:参数中:V(t)是目标值h、h0为积分步长,一般来说h可以等于h0,但是为了减少超调和减少震荡,才把他们分开,一般h0比h大,比如大20倍。当h0较大时,能够明显减少震荡,所以也叫滤波因子。减小h可以抑制噪声放大作用。r为速度因子,值越大,逼近速度越快,但是最好根据实际被控对象的可承受能力而定。表达式中:其中fhan函数第一种表达式为:fhan函…

    2022年5月12日
    40
  • 如何将 apache2 URL 映射到 /var/www/ 以外的目录

    如何将 apache2 URL 映射到 /var/www/ 以外的目录

    2021年4月28日
    123
  • Mac突然连不上WiFi解决步骤「建议收藏」

    Mac突然连不上WiFi解决步骤「建议收藏」事件描述:上午用图书馆无线看电视过程中,莫名就网断了,开始以为是图书馆网问题,后来手机开热点也无法连接。去年刚买Mac时也出现过这种问题,后来换了主板,心慌还以为又要去修理了o(╯□╰)o 开始无用尝试部分: 1.打开设置-网络-位置,更改为自动 2.关机,立即同时按下command+option+R+P,听到三声后松手 解决步骤:移除网络配置和偏好文件 手动删除网络plist…

    2022年6月18日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号