K折验证交叉验证

交叉验证既可以解决数据集的数据量不够大问题,也可以解决参数调图优的问题。这块主要有三种方式:简单交叉验证(HoldOut检验)、k折交叉验证(k-fold交叉验证)、自助法。该文仅针对k折交叉验证做详解。

1、简单交叉验证(HoldOut检验)

方法
        将原始数据集随机划分成训练集和验证集两部分。比如说,将样本安照70%~30%的比例分成两部分,70%的样本用于训练模型;30%的样本用于模型验证
缺点

  1. 数据都只被所用了一次,没有被充分利用
  2. 在验证集上计算出来的最后的评估指标与原始分组有很大关系

2、k折交叉验证(k-fold交叉验证)

为了解决简单交叉验证的不足,提出k-fold交叉验证

  1. 首先,将全部样本划分成k个大小相等的样本子集
  2. 依次遍历这k个子集,每次把当前子集作为验证集,其余所有样本作为训练集,进行模型的训练和评估
  3. 最后把k次评估指标的平均值作为最终的评估指标。在实际实验中,k通常取10
  • 举个例子:这里取k=10,如下图所示:
    • 先将元数据集分成10份
    • 每一次,将其中一份作为测试集,剩下9个作为训练集
    • 最后计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率

 K折交叉验证python实现

# K折交叉检验
def printing_Kfold_scores(x_train_data,y_train_data):
    '''
        x_train_data:训练集特征值
        y_train_data:训练集标签
    '''
    #k-fold表示K新的交叉验证,会得到满个*素引*集合:训练集=indicess[0],验证集=indices[1]
    #shuffle:是否打乱顺序进行样本划分
    fold = KFold(n_splits=10, shuffle=True, random_state=0)
    recall_accs = []
    for iteration, indices in enumerate(fold.split(x_train_data)):
        '''
            1、实例化算法模型,指定L1正则化(逻辑回归)
            2、L1正则化可以看做是损失函数的惩罚项,可产生稀就权值矩阵,即产生一个稀疏模型用于特征选择(各特征对横型的贡献度是不一样的,有的特征正页献大,有的特征贡献小)。
            3、C是正则化系数,通过控制C来调整惩罚力度
        '''
        lr = LogisticRegression(C=0.08, penalty='ll',solver='liblinear')
        # 支持向量机分类器(用于验证的另外分类器模型)
        # lr=svm.SVC(kernel='linear')
        # 训练模型,传入的是训练集,所以x和v的索引都是0
        lr.fit(x_train_data.iloc[indices[0],:], y_train_data.iloc[indices[0],:]['label'])
        
        # 建模后,预测楼型结果,这里用的是验证集,索引为1
        y_pred_undersample = lr.predict(x_train_data.iloc[indices[1],:])
        # 评估召回率,需要传入真实值和预测值
        recall_acc = round(recall_score(y_train_data.iloc[indicess[1],:].values, y_pred_undersample),4)
        recall_accs.append(recall_acc)
        print('第', iteration+1, '次选代:召回率=', recall_acc)
    # 当执行完交叉验证后,计算平均结果
    print('平均召回率',round(np.mean(recall_accs),4))
    
    return None

3、自助法

自助法是基于自助采样法的检验方法。对于总数为n的样本合集,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证。

sklearn.model_selection.cross_val_score(estimator, 
    X, 
    y=None,
    groups=None,
    scoring=None,
    CV='warn',
    n_jobs=None,
    verbose=0,
    fit_params=None,
    pre_dispatch='2*n_jobs',
    error score='raise-deprecating')
  • estimator:需要使用交叉验证的算法
  • X:输入样本数据
  • y:样本标签
  • groups:将数据集分割为训练/测试集时使用的样本的组标签(一般用不到
  • scoring:交叉验证最重要的就是他的验证方式,选择不同的评价方法,会产生不同的评价结果。具体可用哪些评价指标,下图中
  • CV:交叉验证折数或可迭代的次数
  • n jobs:同时工作的cpu个数(-1代表全部)
  • verbose:详细程度
  • fit_params:传递给估计器(验证算法)的拟合方法的参数
  • pre_dispatch:控制并行执行期间调度的作业数量。减少这个数量对付于避免在CPU发送更多作业时CPU内存消耗的扩大是有用的。该参数可以是
  • 没有,在这种情况下,所有的工作立即创建并产生。将其用于轻量级和快速运行的作业,以避免由于按需产生作业而导致延迟
  • 一个int,给出所产生的总工作的确切数量
  • 一个字符串,给出一个表达式作为njobs的函数,如'2*njobs
  • error_score:如果在估计器拟合中发生错误,要分配给该分数的值(一般不需要指定)
     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K交叉验证是一种常用的模型评估方法,广泛应用于机器学习和深度学习中。其基本思想是将原始的训练集数据划分为K个较小的子集,然后依次选取其中一份作为验证集,其余的K-1份作为训练集,进行多次训练和评估,最终得到模型的平均评估结果。 在使用TensorFlow进行K交叉验证时,一般有以下几个步骤: 1. 数据准备:将原始的训练集数据分为K个子集。 2. 模型搭建:使用TensorFlow构建模型,并设置好模型的超参数。 3. K循环:依次选取其中一份作为验证集,其余的K-1份作为训练集,进行模型训练和评估。 4. 评估指标:选择适当的评估指标来衡量模型的性能,比如准确率、精确度、召回率等。 5. 模型融合:将K次训练得到的模型评估结果进行平均,得到最终的模型评估结果。 K交叉验证的优点是可以更客观地评估模型的性能,减少了模型在特定数据集上过拟合的可能性。同时,由于采用了多次训练和验证,可以更充分地利用数据集,提高模型的泛化能力。 然而,K交叉验证也有一些缺点,比如需要进行K次训练,计算时间较长。此外,如果数据集不够大,划分出来的子集可能会比较小,导致评估结果的可靠性降低。 总之,TensorFlow提供了便捷的接口和功能支持,可以轻松地实现K交叉验证,并通过该方法更准确地评估模型的性能,提高模型的泛化能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值