kfold参数_kinfolk中文版

kfold参数_kinfolk中文版sklearn中的KFold与StratifiedKFold函数的使用

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

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

最近使用到了skearn做数据集的处理,记录一下这两个个比较重要的函数:KFold与StratifiedKFold,作用是在机器学习中进行交叉验证来使用
这两个函数都是sklearn模块中的,在应用之前应该导入:

from sklearn.model_selection import  StratifiedKFold,KFold

两者的区别:StratifiedKFold函数采用分层划分的方法(分层随机抽样思想),验证集中不同类别占比与原始样本的比例保持一致,故StratifiedKFold在做划分的时候需要传入标签特征。
下面分别对这两个函数进行举例子说明:
1、KFold函数
参数说明:

n_splits: 默认为3,表示将数据划分为多少份,即k折交叉验证中的k;
shuffle: 默认为False,表示是否需要打乱顺序,这个参数在很多的函数中都会涉及,如果设置为True,则会先打乱顺序再做划分,如果为False,会直接按照顺序做划分;
random_state: 默认为None,表示随机数的种子,只有当shuffle设置为True的时候才会生效。

代码:

import numpy as np
from sklearn.model_selection import KFold,StratifiedKFold
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4],[5,9],[1,5],[3,9],[5,8],[1,1],[1,4]])
y = np.array([0, 1, 1, 1, 0, 0, 1, 0, 0, 0])

print('X:',X)
print('y:',y)

seed = 7
np.random.seed(seed)
kf = KFold(n_splits=3, shuffle=False)

print(kf)
#做split时只需传入数据,不需要传入标签
for train_index, test_index in kf.split(X):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

结果输出:

X: [[1 2]
 [3 4]
 [1 2]
 [3 4]
 [5 9]
 [1 5]
 [3 9]
 [5 8]
 [1 1]
 [1 4]]
y: [0 1 1 1 0 0 1 0 0 0]
KFold(n_splits=3, random_state=None, shuffle=False)
TRAIN: [4 5 6 7 8 9] TEST: [0 1 2 3]
TRAIN: [0 1 2 3 7 8 9] TEST: [4 5 6]
TRAIN: [0 1 2 3 4 5 6] TEST: [7 8 9]

输出说明:
大家注意到,输出中每个Train和Test都对应三个结果,是因为我们在调用函数是,参数n_splits=3,即交叉验证三次。其中的数字只是对应索引,并不是真正的数据,比如第一行TEST: [0 1 2 3]代表着:测试集选取了X[0,1,2,3]即对应:
[1 2]
[3 4]
[1 2]
[3 4]
其他同理。
1、StratifiedKFold函数
StratifiedKFold函数的参数与KFold相同。

import numpy as np
from sklearn.model_selection import KFold,StratifiedKFold
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4],[5,9],[1,5],[3,9],[5,8],[1,1],[1,4]])
y = np.array([0, 1, 1, 1, 0, 0, 1, 0, 0, 0])

print('X:',X)
print('y:',y)

skf = StratifiedKFold(n_splits=4)
print(skf)

#做划分是需要同时传入数据集和标签
for train_index, test_index in skf.split(X, y):
    print('TRAIN:', train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

结果输出:

X: [[1 2]
 [3 4]
 [1 2]
 [3 4]
 [5 9]
 [1 5]
 [3 9]
 [5 8]
 [1 1]
 [1 4]]
y: [0 1 1 1 0 0 1 0 0 0]
StratifiedKFold(n_splits=4, random_state=None, shuffle=False)
TRAIN: [2 3 5 6 7 8 9] TEST: [0 1 4]
TRAIN: [0 1 3 4 6 8 9] TEST: [2 5 7]
TRAIN: [0 1 2 4 5 6 7 9] TEST: [3 8]
TRAIN: [0 1 2 3 4 5 7 8] TEST: [6 9]

参考文章:https://zhuanlan.zhihu.com/p/150446294

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

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

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


相关推荐

  • 最长递增子序列python_求最长递增子序列并输出序列

    最长递增子序列python_求最长递增子序列并输出序列一,    最长递增子序列问题的描述设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<…<akm。求最大的m值。二,    第一种算法:转化为LCS问题求解设序列X=<b1,b2,…,bn>是对序列L…

    2025年6月22日
    3
  • Activity工作流引擎入门

    Activity工作流引擎入门https://blog.csdn.net/fafa211/article/details/79297305https://www.imooc.com/article/details/id/35590

    2022年7月11日
    22
  • Java基础篇:对象拷贝:clone方法 以及 序列化

    Java基础篇:对象拷贝:clone方法 以及 序列化

    2021年4月8日
    118
  • Petalinux2019.1详细安装[通俗易懂]

    Petalinux2019.1详细安装[通俗易懂]1、首先安装虚拟机,VMware2、安装UBUNTU,ubuntu-18.04.1-desktop-amd64.iso,版本必须是这个,和petalinux-v2019.1-final-installer.run版本对应。3、安装虚拟机完成后,在windos和linux之间建立共享文件夹,使之传输文件更简单。(1)首先取得管理员权限首先输入用户密码然后设置管理员密码123456su…

    2025年10月28日
    3
  • acwing-371. 牧师约翰最忙碌的一天(2-SAT)「建议收藏」

    acwing-371. 牧师约翰最忙碌的一天(2-SAT)「建议收藏」牧师约翰在 9 月 1 日这天非常的忙碌。有 N 对情侣在这天准备结婚,每对情侣都预先计划好了婚礼举办的时间,其中第 i 对情侣的婚礼从时刻 Si 开始,到时刻 Ti 结束。婚礼有一个必须的仪式:站在牧师面前聆听上帝的祝福。这个仪式要么在婚礼开始时举行,要么在结束时举行。第 i 对情侣需要 Di 分钟完成这个仪式,即必须选择 Si∼Si+Di 或 Ti−Di∼Ti 两个时间段之一。牧师想知道他能否满足每场婚礼的要求,即给每对情侣安排Si∼Si+Di 或 Ti−Di∼Ti,使得这些仪式的时

    2022年8月9日
    4
  • HTML 下划线与删除线[通俗易懂]

    HTML 下划线与删除线[通俗易懂]一、下划线标签<u></u><html><head><title>下划线</title></head><body><!–下面是下划线的用法–><u>这里显示的内容是下划线</u></body></html>二、删除线标签<s></s><html><he

    2022年6月4日
    54

发表回复

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

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