K-Fold交叉验证 原理+python实现

K-交叉验证是指将原始数据分成K(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2.。而K-CV 的实验共需要建立 k models,并计算 k test sets 的平均辨识率。在实作上,k 要够大才能使各回合中的 训练样本数够多,一般而言 k=10 (作为一个经验参数)算是相当足够了。

例如:假设将数据集D分为K个包(这里K = 6),每次将其中一个包作为验证集,其他K-1个包作为训练集

##一个简单的4折交叉验证
from sklearn.model_selection import KFold
import numpy as np
import matplotlib.pyplot as plt
 
X = np.array([[1,2], [3,4], [1,3], [3,5]])
Y = np.array([1, 2, 3, 4])
 
KF = KFold(n_splits = 4)  #建立4折交叉验证方法 查一下KFold函数的参数
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]
    print("对于数据X训练数据:", X_train)
    print("对于数据X测试数据:", X_test)
    print("对于数据Y训练数据:", Y_train)
    print("对于数据Y测试数据:", Y_test)

结果如下:

 

'''代码解释

   1、KFold(n_splits = 4)            2、KF.split(X)
       n_splits:表示划分几等份

       shuffle:在每次划分时,是否进行洗牌,①若为Falses时,其效果等同于random_state等于整数,每次划分的结果相同,②若为True时,每次划分的结果都不一样,表示经过洗牌,随机取样的

       random_state:随机种子数

       split():将数据集划分成训练集和测试集,返回索引生成器'''

from sklearn.model_selection import KFold
 
kf = KFold(n_splits=5, random_state=43, shuffle=True)
a=[[1,2],[3,4],[5,6],[7,8],[9,10]]
b=[1,2,3,4,5]
for i,j in kf.split(a,b):
    print(i,j)

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨能学会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值