K-fold cross-validation_validation

K-fold cross-validation_validationKFold是sklearn中用来做交叉检验的,在sklearn的版本升级中,KFold被挪了地方。在sklearn0.18及以上的版本中,sklearn.cross_validation包被废弃,KFold被挪到了sklearn.model_selection中,本来以为挪就挪了,用法没变就行,结果,,谁用谁知道。cross_validation.KFold与model_selecti…

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

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

KFold是sklearn中用来做交叉检验的,在sklearn 的版本升级中,KFold被挪了地方。

在sklearn 0.18及以上的版本中,sklearn.cross_validation包被废弃,KFold被挪到了sklearn.model_selection中,本来以为挪就挪了,用法没变就行,结果,,谁用谁知道。

cross_validation.KFold与model_selection.KFold的不同用法

cross_validation.KFold做交叉验证

from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import KFold, cross_val_score
from sklearn.metrics import confusion_matrix,recall_score,classification_report

def printing_Kfold_scores(x_train_data,y_train_data):
    fold = KFold(len(y_train_data),5,shuffle=False) 
    #将训练集切分成5份,做交叉验证
  
    #正则化惩罚项系数
    c_param_range = [0.01,0.1,1,10,100]

    results_table = pd.DataFrame(index = range(len(c_param_range),2), columns = ['C_parameter','Mean recall score'])
    results_table['C_parameter'] = c_param_range

    j = 0
    for c_param in c_param_range:
        print('-------------------------------------------')
        print('C parameter: ', c_param)
        print('-------------------------------------------')
        print('')

        recall_accs = []
        #循环进行交叉验证
        for iteration, indices in enumerate(fold,start=1):
            #建立逻辑回归模型,选择正则惩罚类型L1
            lr = LogisticRegression(C = c_param, penalty = 'l1')

            lr.fit(x_train_data.iloc[indices[0],:],y_train_data.iloc[indices[0],:].values.ravel())

            y_pred_undersample = lr.predict(x_train_data.iloc[indices[1],:].values)

            recall_acc = recall_score(y_train_data.iloc[indices[1],:].values,y_pred_undersample)#计算召回率
            
            recall_accs.append(recall_acc)
            
            print('Iteration ', iteration,': recall score = ', recall_acc)

        results_table.ix[j,'Mean recall score'] = np.mean(recall_accs)
        j += 1
        print('')
        print('Mean recall score ', np.mean(recall_accs))
        print('')
    results_table['Mean recall score'] = results_table['Mean recall score'].astype('float64')
    best_c = results_table.loc[results_table['Mean recall score'].idxmax()]['C_parameter']
    
    # Finally, we can check which C parameter is the best amongst the chosen.
    print('*********************************************************************************')
    print('Best model to choose from cross validation is with C parameter = ', best_c)
    print('*********************************************************************************')
    
    return best_c

model_selection.KFold做交叉验证

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import KFold, cross_val_score
from sklearn.metrics import confusion_matrix,recall_score,classification_report 

def printing_Kfold_scores(x_train_data,y_train_data):
    #将训练集切分成5份,做交叉验证
    kf = KFold(n_splits=5,shuffle=False)
    kf.get_n_splits(x_train_data)

    #正则化惩罚项系数
    c_param_range = [0.01,0.1,1,10,100]

    results_table = pd.DataFrame(index = range(len(c_param_range),2), columns = ['C_parameter','Mean recall score'])
    results_table['C_parameter'] = c_param_range

    j = 0
    for c_param in c_param_range:
        print('-------------------------------------------')
        print('C parameter: ', c_param)
        print('-------------------------------------------')
        print('')

        recall_accs = []
        #循环进行交叉验证
        for iteration, indices in kf.split(x_train_data):
            
            lr = LogisticRegression(C = c_param, penalty = 'l1',solver='liblinear')
            
            lr.fit(x_train_data.iloc[iteration,:],y_train_data.iloc[iteration,:].values.ravel())

            y_pred_undersample = lr.predict(x_train_data.iloc[indices,:].values)

            recall_acc = recall_score(y_train_data.iloc[indices,:].values,y_pred_undersample)#计算召回率
            recall_accs.append(recall_acc)
            
            print('recall score = ', recall_acc)

        results_table.ix[j,'Mean recall score'] = np.mean(recall_accs)
        j += 1
        print('')
        print('Mean recall score ', np.mean(recall_accs))
        print('')
    results_table['Mean recall score'] = results_table['Mean recall score'].astype('float64')
    best_c = results_table.loc[results_table['Mean recall score'].idxmax()]['C_parameter']
    
    # Finally, we can check which C parameter is the best amongst the chosen.
    print('*********************************************************************************')
    print('Best model to choose from cross validation is with C parameter = ', best_c)
    print('*********************************************************************************')
    
    return best_c

在新版中,将数据切分需要两行代码:kf = KFold(n_splits=5,shuffle=False)  、 kf.get_n_splits(x_train_data),用for iteration, indices in kf.split(x_train_data):取出,看到iteration和indices装的是两段index值,iteration装了五分之四,indices装的是五分之一,如下图

K-fold cross-validation_validation

 在旧版本中,将数据切分成n份就是一句代码:fold = KFold(len(y_train_data),5,shuffle=False),并且切分后用:for iteration, indices in enumerate(fold,start=1):,取出的iteration是1、2、3、4、5这几个数,indices是上图中两部分的合集

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

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

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


相关推荐

  • AssertValid和Dump 这两个函数的作用[通俗易懂]

    AssertValid和Dump 这两个函数的作用[通俗易懂]
    AssertValid函数是用来判断表达式的合法性或正确性,如果不正确或不合法则终止程序并返回相应的提示信息 
     如AssertValid(t==0);//用来判断t是否等于0,如果t!=0则终止程序 
     Dump函数一般用来显示debug信息的,其函数中的内容一般在debug时,在debug窗口中才能看到。
    CObject::AssertValid 成员函数提供对对象内部状态的运行时检查。尽管从 CObject 派生类时不需要重写 Asse

    2022年7月14日
    17
  • dnspod url转发_url解析

    dnspod url转发_url解析一些比较常用的域名软件有又url转发的功能,类似于花生壳,nat123,dnspod等都有转发url的功能没大会具体是怎么转发的方式是怎么样的呢?经过网上资料查找,查看了一些书籍,大概有了一些了解        首先了解一下,URL转发包括显性转发和隐性转发。显性转发:访问域名后,转跳到新的自定义URL地址,浏览器http地址是变化的。隐性转发:访问域名后,浏览器HTTP地址是不变的,但

    2022年10月19日
    5
  • 算法导论第三版   练习2.2-2

    算法导论第三版   练习2.2-2

    2021年9月4日
    65
  • matlab有约束非线性规划_matlab 非线性规划

    matlab有约束非线性规划_matlab 非线性规划MATLAB非线性规划及非线性约束条件求解【题1】求非线性规划问题:221212121min262fxxxxxx=+—12121212222.23,0xxxxstxxxx+≤??-+≤??+≤??≥?clearallclcf=@(x)((1/2)*x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-6*x(2));A=[11;-12;…

    2022年8月31日
    5
  • linux中编写shell脚本一次性添加多个用户_Linux cc脚本

    linux中编写shell脚本一次性添加多个用户_Linux cc脚本目录ShellShell脚本的执行Shell脚本编写规范Shell中的变量变量的算术运算双小括号(())数值运算命令的用法let运算命令的用法expr命令的用法br命令的用法$[]符号的运算示例Shell脚本的条件测试几种条件测试语句文件测试操作符字符串测试操作符整数二元比较操作符逻辑操作符测试表达式test、…

    2022年8月18日
    8
  • sublime 激活码【2021.7最新】

    (sublime 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlTR0LFTT656-eyJsaWN…

    2022年3月22日
    61

发表回复

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

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