• K折交叉验证——cross_val_score函数使用说明


    机器学习中,许多算法中多个超参数,超参数的取值不同会导致结果差异很大,如何确定最优的超参数?此时就需要进行交叉验证的方法,sklearn给我们提供了相应的cross_val_score函数,可对数据集进行交叉验证划分。

    一、K折交叉验证(Cross-validation)简介

    正常情况下,在数据集划分阶段,通常会划分为训练集trainset和测试集testset,在数据集数量足够多的情况下进行划分,效果较好。但是,对于数据集特别少的情况下,直接划分为训练集和测试集进行训练,模型的效果可能不太好,此时便引入了交叉验证。
    交叉验证Cross-validation思想很简单,就是对划分好的训练集再进行划分,分为训练集trainset和验证集validset。最终的数据集分为了三类,训练集trainset、验证集validset和测试集testset,通俗的理解为:训练集是学习知识,验证集是月考,测试集是期末考试。
    模型在学习了一段知识之后,就定期进行月考试试手,模型训练完成好之后,再通过期末考试检验。就跟上初高中考试的感觉差不多,如果直接上来就是期末考试,谁顶得住啊,所以一般都会进行几次月考,然后查漏补缺,最终迎接期末考试。

    举个例子:
    原本数据集共1000张,训练集800张,测试集200张
    交叉验证就是对那800张训练集再次进行划分,分为600张训练集和200张验证集
    在这里插入图片描述

    二、官网API

    官网API
    需要导包:from sklearn.model_selection import cross_val_score

    这里的参数还是比较多的,具体的参数使用,可以根据官网给的demo进行学习,多动手尝试;这里就以一些常用的参数进行说明。

    Cross-validation: evaluating estimator performance
    交叉验证:评估评估器(estimator)性能
    通过交叉验证评估分数

    参数

    ①estimator

    用于拟合数据的对象
    也就是模型对象,例如可以是一个线性模型lasso = linear_model.Lasso()

    具体官网详情如下:
    在这里插入图片描述

    ②X

    拟合数据X,可以是列表或数组。

    具体官网详情如下:
    在这里插入图片描述

    ③y

    在监督学习的情况下,要尝试预测的目标变量,也就是自变量Y

    具体官网详情如下:
    在这里插入图片描述

    ④cv

    确定交叉验证分割策略,也就是K折交叉验证中的K值
    None”,默认5倍交叉验证
    int,用于指定(分层)KFold 中的折叠数,即K值

    具体官网详情如下:
    在这里插入图片描述

    返回值

    scores

    交叉验证每次运行时估计器的得分数组,cv=k,就会得到k个估计器的得分数组

    具体官网详情如下:
    在这里插入图片描述

    三、代码实现

    ①导包

    若导入过程报错,pip安装即可

    import numpy as np
    import pandas as pd 
    import matplotlib.pyplot as plt
    %matplotlib inline
    from sklearn.model_selection import train_test_split
    from sklearn.model_selection import cross_val_score
    from sklearn.svm import SVC
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ②加载数据集

    数据集可以自己简单整个,csv格式即可,我这里使用的是6个自变量X和1个因变量Y
    在这里插入图片描述

    fiber = pd.read_csv("./fiber.csv")
    fiber.head(5) #展示下头5条数据信息
    
    • 1
    • 2

    在这里插入图片描述

    ③创建模型

    很多模型都可以的,这里以SVM为例,可参考博文:三、支持向量机算法(SVC,Support Vector Classification)(有监督学习)

    svc = SVC(C=3.0,kernel='sigmoid',gamma='auto',random_state=42)
    
    • 1

    ④K折交叉验证

    k-fold cross validation,K折交叉验证,将数据集分为k(这里k=3)个大小相似的子集,并将k-1(3-1=2)个子集的并集作为训练集,余下的1个子集作为评估集,由此可得到k(3)个不同的训练/评估集;

    k_corss = cross_val_score(svc, X, Y, cv=3)
    print(k_corss)
    
    • 1
    • 2

    ⑤完整代码

    import numpy as np
    import pandas as pd 
    import matplotlib.pyplot as plt
    %matplotlib inline
    from sklearn.model_selection import train_test_split
    from sklearn.model_selection import cross_val_score
    from sklearn.svm import SVC
    
    fiber = pd.read_csv("./fiber.csv")
    fiber.head(5) #展示下头5条数据信息
    
    X = fiber.drop(['Grade'], axis=1)
    Y = fiber['Grade']
    
    X_train, X_test, y_train, y_test = train_test_split(X,Y,train_size=0.75,test_size=0.25,random_state=42,shuffle=True)
    
    print(X_train.shape) #(36,6) 
    print(y_train.shape) #(36,)
    print(X_test.shape) #(12,6)
    print(y_test.shape) #(12,)
    
    svc = SVC(C=3.0,kernel='sigmoid',gamma='auto',random_state=42)
    
    k_corss = cross_val_score(svc, X, Y, cv=3)
    print(k_corss)
    
    • 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
  • 相关阅读:
    CO41创建生产订单维护增强字段
    消息队列-RabbitMQ-消息确认机制
    探索进军元宇宙的代表性企业
    极智AI | 大模型优化之KV Cache
    神经网络画图与图片格式svg转换为jpg或png
    查询附近500米的餐厅
    数据结构之单链表
    大一新生HTML期末作业,网页制作作业——明星介绍易烊千玺网站HTML+CSS
    CCF-CSP 30次 第二题【矩阵运算】
    msvcp120.dll丢失怎么办?(五种方法快速解决)
  • 原文地址:https://blog.csdn.net/qq_41264055/article/details/133435460