• 机器学习——pca降维/交叉验证/网格交叉验证


    1、pca降维:目的是提升模型训练速度

    • 定义:
      在这里插入图片描述
    • 使用方法:给训练数据或者测试数据进行降维处理
      • 给训练数据降维
        在这里插入图片描述
      • 给测试数据降维:这里1就要用transform,而不是fit_transform,因为之前训练数据降维时特征已经确定,测试数据提取的特征要和训练数据保持一致。
        在这里插入图片描述

    2、交叉验证:目的是保证模型的测试数据和训练数据划分清楚,从而对比选出得分最高的模型,保证数据划分的稳定性,而不是之前随机划分。

    • 概念:每次进行数据划分都是随机的,所以没法保证稳定的模型精确度
      在这里插入图片描述
    • 方法一:k折交叉验证(将所有数据划分成k份,每次训练用1/k作为测试数据,其余数据作为训练数据),使用方式是先通过sklearn库中的model_selection导入KFold,然后设定好KFold的n_splits参数,之后通过模型的split方法划分训练数据和测试数据,返回的是一个生成器,其中会按照数据的下标划分好数据,使用时可以通过数组索引的方式(数组[数组])。注意:返回给你的数据有k份,每一份数据都是取其中1/k作为测试数据,其余数据作为训练数据,且每份数据都是所有数据的下标。
    • 方法二:StratifiedKFold(分层KFold):相对于方法一,挑着分,分的更细了,使用方法类似K折交叉验证。注意:返回给你的数据有k份,每一份数据都是取其中1/k作为测试数据,其余数据作为训练数据,且每份数据都是所有数据的下标。
    • 应用示例
    from sklearn.model_selection import KFold # 这是k折交叉验证的包
    from sklearn.model_selection import StratifiedKFold # 这是分层KFold的包
    # 调用
    kf = KFold(n_splits=5) # n_splits等于k折,设置为几,就会把数据分成几份
    st = StratifiedKFold(n_splits=5) # n_splits等于k折,设置为几,就会把数据分成几份
    iterable_kf = kf.split(Date,Target) # 生成的是迭代器,最好用for循环调用
    iterable_st = st.split(Date,Target) # 生成的是迭代器,最好用for循环调用
    for train_index, test_index in st_iterable:
        x_train = Date[train_index] # 注意这种取数据的方式需要Date是np.array类型的数组才可以取到对应行
        y_train = Target[train_index]
        x_test = Date[test_index]
        y_test = Target[test_index]
     ···
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3、网格交叉验证:GridSearchCV存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数

    • 举例:SVM模型选择最优惩罚因子C和最优高斯核函数对应的参数gamma(gamma参数只有核函数为高斯时才有)
    # 导包
    import numpy as np
    import pandas as pd
    from sklearn.datasets import load_iris
    from sklearn.model_selection import GridSearchCV
    from sklearn.svm import SVC
    
    # 导入数据
    data, target = load_iris(return_X_y=True)
    '''
    网格交叉验证参数说明:
    estimator:模型对象,不需要带参数,只需要输入模型对象即可
    param_grid:网格参数,通过字典形式(键为模型参数名字符串,值为可能的数值列表)输入,每个参数需要提供多个值,会选择最优组合
    n_job:多进程,-1表示适用所有处理器CPU
    cv:默认分成5份,分的方法类似k折交叉验证,属于内部操作
    '''
    svc = SVC()
    param_grid = {
        'C':[0.1, 1,10,15],
        'gamma':[0.01,0.05,0.1,0.5,1]
    }
    gv = GridSearchCV(estimator=svc,param_grid=param_grid,n_jobs=-1,cv=5)
    gv.fit(data,target)
    # 获取网格交叉验证最终获取的一些最优属性
    gv.best_score_,gv.best_params_,gv.best_estimator_ 
    # (0.9866666666666667, {'C': 10, 'gamma': 0.05}, SVC(C=10, gamma=0.05))
    
    • 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

  • 相关阅读:
    [ 行业洞察 ]“变”即常态,数字化服务商赴约转型盛宴
    一个人 三个月 干了二十万
    QT右键菜单的快捷键失效问题
    docker安装openGauss数据库
    【前端】Vue+Element UI案例:通用后台管理系统-登陆页面Login
    jQuery基础知识
    怎样下载视频号视频?分享6种有效方法
    #力扣:136. 只出现一次的数字@FDDLC
    【软件测试】自动化测试selenium
    高效管理和盘点固定资产的办法
  • 原文地址:https://blog.csdn.net/sz1125218970/article/details/133036246