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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux awk 数组和循环[通俗易懂]

    linux awk 数组和循环[通俗易懂]awk作为强大的文本处理工具,少不了数组处理。awk中数组叫做关联数组(associativearrays),下标可以是数字也可以是字符串。awk中的数组不必提前声明,也不必声明大小,初始化数组元素用0或空串,这根据上下文而定。一语法语法: awk'{pattern+action}’  或 awk’pattern{action}’其中pattern表示AWK

    2022年7月19日
    22
  • 一次阿里笔试

    一次阿里笔试时间2020年2月5日主题阿里一面:笔试/代码面时长一个小时前置条件已经历电话面试,约定好笔试时间其它社招、在线笔试结果通过题目类型并发、很简单的算法题题目及当时自己提交的答案1、(JDK1.8)线程A打印a,线程B打印l,线程C打印i,三个线程交替打印,各打印102次,alialiali……publicclassThreadP…

    2022年5月10日
    43
  • linux默认关闭防火墙(win10永久关闭防火墙命令)

    Linux关闭防火墙命令问题:老是关闭防火墙太麻烦,所以选择彻底关闭防火墙,发现每次都记不住命令!特此记录

    2022年4月15日
    68
  • 双向 LSTM

    双向 LSTM本文结构:为什么用双向LSTM什么是双向LSTM例子为什么用双向LSTM?单向的RNN,是根据前面的信息推出后面的,但有时候只看前面的词是不够的,例如,我今天不舒服,我打算__一天。只根据‘不舒服‘,可能推出我打算‘去医院‘,‘睡觉‘,‘请假‘等等,但如果加上后面的‘一天‘,能选择的范围就变小了,‘去医院‘这种就不能选了,而‘请假‘‘休息‘之类的被选择概率就会更大。什么是双向L

    2022年6月15日
    74
  • 每天一个linux命令(34):du 命令

    每天一个linux命令(34):du 命令

    2021年10月7日
    39
  • pycharm使用pip安装第三方库_pycharm详细安装教程

    pycharm使用pip安装第三方库_pycharm详细安装教程python的安装教程1.打开python官网2.windows系统点Downloads下面的windows3.带64的表示电脑是64位系统的,其中不带64的表示32位操作系统的,而右边一列数字后面有字母(即带有后缀)的不建议下载,就是临时版本,而我们最好下载3.6的版本。1.DownloadWindowsx86-64embeddablezipfile这是一个压缩文件2.DownloadWindowsx86-64executableinstaller这是一个可执行的文件

    2022年8月26日
    3

发表回复

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

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