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

2023-09-20 14:16:31

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]
    y_train = Target[train_index]
    x_test = Date[test_index]
    y_test = Target[test_index]
 ···

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))

更多推荐

Linux磁盘管理:最佳实践

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

算法通关村第14关【白银】| 堆的经典问题

1.数组中的第k个最大元素思路:最直观的就是选择法,遍历一k次找到第k大的数之前使用快速排序的思想每次找出一个位置,会超时这里使用堆(优先队列),找最大用小堆,找最小用大堆。例如找第k大的数,新建一个空间为k的最小优先队列,只要比当前优先队列最小值大就替换进去,这样全部的数遍历一遍,里面留下的就是前k大的数了,其他的全

科目二倒车入库

调整座位和后视镜离合踩到底大腿小腿成130-140°上半身90-100°座椅高度能看到前方全部情况后视镜调节到能看到后门把手,且后门把手刚好在后视镜上方边缘、离车1/3处。保持直线:前进:车仪表盘中央的原点和地面上的黄线擦边,这就是离右侧30-40cm倒车:右后视镜中一个手指的宽度对应地面15cm倒车观察右后视镜,车门

1.什么是jwt?jwt的作用是什么?2.jwt的三个部分是什么?三者之间的关系如何?3.JWT运行的流程是什么

1.**什么是JWT?JWT的作用是什么?**JWT(JSONWebToken)是一种用于在不同系统或组件之间传输信息的紧凑且安全的标准。它的作用主要有两个方面:-**身份验证(Authentication)**:JWT通常用于验证用户的身份。当用户登录时,服务器会生成一个JWT,并将其发送给客户端。客户端随后在每个请

按钮和文本框事件监听

事件监听:当某个事情发生的时候,干什么一、按钮Button监听publicclassTestActionEvent{publicstaticvoidmain(String[]args){//按下按钮,触发一些事件Frameframe=newFrame();//弹窗的监听事件/*frame.addWindowListen

如何使用国际站腾讯云服务器进行手机测速

怎么运用腾讯云服务器进行手机测速,包括挑选适宜的服务器、装置测速软件、设置测验参数等过程。腾讯云服务器是一款高性能、高可靠性的云核算服务,能够满足用户在不同场景下的需求。而在手机测速方面,腾讯云服务器相同有着出色的表现。本文将介绍怎么运用腾讯云服务器进行手机测速,帮助用户了解自己的网络速度。首要,挑选适宜的服务器是进行

HTTPS的加密流程

对称加密:只有一个密钥。加密:明文+密钥=>密文;解码:密文+密钥=>明文。非对称加密:有两个密钥,一个公钥,一个私钥。加密:明文+公钥=>密文;解码:密文+私钥=>明文;或加密:明文+私钥=>密文;解码:密文+公钥=>明文。HTTPS的基本工作过程:加密:针对HTTP的各种header和body1.使用对称密钥,来保

正则匹配手机、邮箱、密码

正则匹配手机、邮箱、密码publicabstractclassRegexPatterns{/***手机号正则*/publicstaticfinalStringPHONE_REGEX="^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";/***邮箱

Redis 全景解析

Redis解析信息图什么是Redis?Redis("REmoteDIctionaryService"的缩写)是一个开源的键值数据库服务器。对Redis最准确的描述是它是一个数据结构服务器。Redis的这种特定性质使其在开发人员中非常受欢迎和广泛采用。与其对行进行迭代、排序和排列,不如从头开始使用数据结构来存储数据?早期

spark的资源调整参数

–基础资源setspark.driver.memory=15g;setspark.driver.cores=3;setspark.driver.memoryOverhead=4096;setspark.executor.memory=5G;setspark.executor.memoryOverhead=1024;se

淘宝分布式文件存储系统(一) -TFS

淘宝分布式文件存储系统(一)->>TFS目录:什么是文件系统文件存储的一些概念文件的结构系统读取文件的方式为什么采用大文件结构的原因文件系统:将我们的数据整合成目录或者文件,提供对文件的存取接口,基于文件的权限进行访问,简单的说,文件系统就是对文件进行管理的方式.文件存储的一些概念:扇区.存储数据的磁盘的最小单位,通常

热文推荐