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)
上一篇 2026年2月2日 下午5:22
下一篇 2026年2月2日 下午6:01


相关推荐

  • 类加载器的方法_JS加载器

    类加载器的方法_JS加载器packagecom.tech.load.def;/***@authorlw*@since2021/12/3*/publicclassUserImpl{static{System.out.println(“UserImplinit…”);}}packagecom.tech.load.def;/***@authorlw*@since2021/12/3*/publicclassDe..

    2025年9月18日
    4
  • 苹果新旧手机数据转移_换机必备知识:如何将数据转移到Oppo手机上

    苹果新旧手机数据转移_换机必备知识:如何将数据转移到Oppo手机上现在的智能手机越来越便宜了,换手机是经常的事情。但唯一的缺点是更换手机时新旧手机的数据备份很麻烦。许多人会选择将数据传输到计算机,然后再传输到新手机。或者,用户将可以备份的内容备份到microSD卡上。但这些方法都比较老土。如今,智能手机制造商拥有专用的应用程序,可以使此过程变得轻松,高效和无缝。本指南将教您如何将所有个人数据(SMS,电话,应用程序,照片等)从旧手机转移到Oppo品牌的手机上。…

    2022年5月25日
    228
  • 文本分类算法之–贝叶斯分类算法的实现Java版本

    文本分类算法之–贝叶斯分类算法的实现Java版本package com.vista;import java.io.IOException;      import jeasy.analysis.MMAnalyzer;/*** 中文分词器*/public class ChineseSpliter {    /**    * 对给定的文本进行中文分词    * @param text 给定的文本   

    2022年5月30日
    32
  • 全国电信DNS(成都联通dns)

    来自http://tiger506.blog.51cto.com/blog/318536/330846 全国各地电信DNS:北京DNS地址:202.96.199.133202.96.0.133202.106.0.20202.106.148.1202.97.16.195上海DNS地址:202.96.199.132202.96.199.133202.

    2022年4月10日
    223
  • 微信搜索,变“大”了

    微信搜索,变“大”了

    2026年3月12日
    2
  • Redis设计与实现笔记 |目录

    Redis设计与实现笔记 |目录第一部分 数据结构与对象 Redis 设计与实现笔记 一 字符串 Redis 设计与实现笔记 二 链表结构 Redis 设计与实现笔记 三 字典第二部分 单机数据库的实现 Redis 设计与实现笔记 九 持久化 nbsp 第三部分 多机数据库的实现 Redis 设计与实现笔记 十五 复制 nbsp 第四部分 独立功能的实现 nbsp 本系列博文是本人学习 Redis 设计

    2026年3月16日
    2

发表回复

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

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