kfold交叉验证k越大_内部交叉验证

kfold交叉验证k越大_内部交叉验证交叉验证的原理放在后面,先看函数。设X是一个9*3的矩阵,即9个样本,3个特征,y是一个9维列向量,即9个标签。现在我要进行3折交叉验证。执行kFold=KFold(n_splits=3):其中KFold是一个类,n_split=3表示,当执行KFold的split函数后,数据集被分成三份,两份训练集和一份验证集。执行index=kFold.split(X=X):index是一个生成器…

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

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

交叉验证的原理放在后面,先看函数。

设X是一个9*3的矩阵,即9个样本,3个特征,y是一个9维列向量,即9个标签。现在我要进行3折交叉验证。

执行kFold = KFold(n_splits=3) :其中KFold是一个类,n_split=3表示,当执行KFold的split函数后,数据集被分成三份,两份训练集和一份验证集。

执行index  = kFold.split(X=X):index是一个生成器,每个元素是一个元组,元组里面有两个元素,第一个是训练集的索引,第二个是验证集的索引。因为这里将9个样本分成三份,所以index中有三个这样的元组

之后便可以迭代index来获得训练集和验证集的索引,从而获得训练集和测试集了

下面是代码示例

1 importnumpy as np2 from sklearn.model_selection importKFold3

4 a = np.arange(27).reshape(9, 3)5 print(a)6 b = np.arange(9).reshape(9, 1)7 kfold = KFold(n_splits=3, shuffle=True)8 index = kfold.split(X=a)9 print(list(index))10 print(type(index))11 index = kfold.split(X=a, y=b)12 for train_index, test_index inindex:13 print(“————————————————-“)14 print(a[train_index]) #注意如果a是datafram类型就得用a.iloc[tain_index], 因为a[train_index]会被认为是访问列15 print(a[test_index])

运行结果如下:

[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[ 9 10 11]

[12 13 14]

[15 16 17]

[18 19 20]

[21 22 23]

[24 25 26]]

[(array([0, 1, 3, 4, 5, 6]), array([2, 7, 8])), (array([1, 2, 3, 4, 7, 8]), array([0, 5, 6])), (array([0, 2, 5, 6, 7, 8]), array([1, 3, 4]))]

————————————————-

[[ 6 7 8]

[ 9 10 11]

[12 13 14]

[18 19 20]

[21 22 23]

[24 25 26]]

[[ 0 1 2]

[ 3 4 5]

[15 16 17]]

————————————————-

[[ 0 1 2]

[ 3 4 5]

[ 9 10 11]

[15 16 17]

[21 22 23]

[24 25 26]]

[[ 6 7 8]

[12 13 14]

[18 19 20]]

————————————————-

[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[12 13 14]

[15 16 17]

[18 19 20]]

[[ 9 10 11]

[21 22 23]

[24 25 26]]

Process finished with exit code 0

原理补充:

在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。

验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训练集之外数据的匹配程度。模型在验证数据中的评估常用的是交叉验证,又称循环验证。它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。

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

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

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


相关推荐

  • Django(2)python虚拟环境virtualenvwrapper[通俗易懂]

    Django(2)python虚拟环境virtualenvwrapper[通俗易懂]python虚拟环境虚拟环境(virtualenvironment),它是一个虚拟化,从电脑独立开辟出来的环境。通俗的来讲,虚拟环境就是借助虚拟机来把一部分内容独立出来,我们把这部分独立出来的东西

    2022年7月29日
    5
  • 计算机网络基础知识整理「建议收藏」

    参考书目:计算机网络(第6版谢希仁)一、概述1、三网:电信网络、有线电视网络和计算机网络2、电路交换、报文交换、分组交换的比较电路交换公共电话网(PSTN网)和移动网(包括GSM和CDMA网)采用的都是电路交换技术,它的基本特点是采用面向连接的方式,在双方进行通信之前,需要为通信双方分配一条具有固定宽带的通信电路,通信双方在通信过程中一直占用所分配的资源,直到通信结束,并且在电…

    2022年4月17日
    80
  • jrebel 无效无法更换lisence

    jrebel 无效无法更换lisence

    2020年11月19日
    250
  • unity开发微信小游戏1[通俗易懂]

    unity开发微信小游戏1[通俗易懂]unity开发微信小游戏

    2025年5月31日
    2
  • js中settimeout和setInterval区别_JavaScript set

    js中settimeout和setInterval区别_JavaScript setsetTimeout描述setTimeout(code,millisec)setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式。注:调用过程中,可以使用clearTimeout(id_of_settimeout)终止参数描述code必需,要调用的函数后要执行的JavaScript代码串。millisec必需,在执行代码前需等待的毫秒数。setTimeintervalsetIn…

    2022年10月4日
    3
  • Java main方法

    Java main方法publicstaticvoidmain(String[]args){}或者 publicstaticvoidmain(Stringargs[]){}main方法是我们学习Java语言学习的第一个方法,也是每个java使用者最熟悉的方法,每个Java应用程序都必须有且仅有一个main方法。在eclipse里可以使用输入main,在按住Alt+/的方式快速创建main方法

    2022年6月1日
    30

发表回复

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

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