分类算法系列③:模型选择与调优 (Facebook签到位置预测)
目录
模型选择与调优
1、介绍
模型选择(Model Selection):
调优(Hyperparameter Tuning):
本章重点
2、交叉验证
介绍
为什么需要交叉验证
数据处理
3、⭐超参数搜索-网格搜索(Grid Search)
介绍
API
🔺Facebook签到位置预测K值调优
🍃作者介绍:准大三网络工程专业在读,努力学习Java,涉猎深度学习,积极输出优质文章
⭐分类算法系列①:初识概念
⭐分类算法系列②:KNN(K-近邻)算法
🍁您的三连支持,是我创作的最大动力🌹
模型选择与调优
1、介绍
在机器学习中,模型选择(Model Selection)和调优(Hyperparameter Tuning)是优化模型性能的关键步骤。模型选择涉及选择合适的算法或模型架构,而调优则涉及调整模型的超参数以达到最佳性能。以下是关于这两个步骤的详细介绍:
模型选择(Model Selection):
模型选择是选择在给定任务中使用哪种算法或模型的过程。不同的算法适用于不同的问题,因此选择适当的算法对于取得良好的性能至关重要。模型选择通常涉及以下步骤:
- 问题定义:明确定义要解决的问题,例如分类、回归、聚类等。
- 数据准备:对数据进行预处理、清洗和特征工程,以确保数据适用于所选的算法。
- 候选模型:根据问题和数据类型,选择几种合适的模型作为候选,例如决策树、支持向量机、神经网络等。
- 训练和验证:使用交叉验证等技术,在训练数据上训练候选模型,并在验证集上评估其性能。
- 性能比较:比较不同模型在验证集上的性能指标,如准确率、精确度、召回率等。
- 选择最佳模型:根据性能比较,选择性能最佳的模型作为最终模型。
调优(Hyperparameter Tuning):
调优是指为机器学习模型选择最佳的超参数,以优化模型的性能。超参数是在训练过程之外设置的参数,它们决定了模型的结构和行为,如学习率、正则化参数、树的深度等。调优的目标是找到使模型在验证集上表现最佳的超参数组合。调优通常包括以下步骤:
- 选择超参数空间:选择要调优的超参数和它们的可能取值范围。
- 搜索方法:选择超参数搜索方法,如网格搜索、随机搜索、贝叶斯优化等。
- 交叉验证:使用交叉验证将数据分为训练集和验证集,以评估不同超参数组合的性能。
- 评价指标:选择适当的评价指标来衡量不同超参数组合的性能。
- 调优过程:根据选择的搜索方法,不断尝试不同的超参数组合,并记录它们的性能。
- 选择最佳组合:从调优过程中选择在验证集上性能最佳的超参数组合作为最终模型的超参数。
模型选择和调优是迭代过程,可能需要多次尝试不同的模型和超参数组合,以找到最适合任务的模型并达到最佳性能。使用交叉验证、可视化工具和自动化调优库(如scikit-learn中的GridSearchCV和RandomizedSearchCV)可以帮助更有效地进行模型选择和调优。
本章重点
本章重点是交叉验证!结合的示例是之前的Facebook签到位置问题,对之前使用KNN算法完成的Facebook签到位置预测进行调优,使其结果更加准确。
2、交叉验证
介绍
交叉验证(Cross-Validation)是一种用于评估机器学习模型性能的技术,它有助于更准确地估计模型在未知数据上的表现。交叉验证通过在不同的数据子集上进行多次训练和验证,提供了对模型泛化性能的更稳定估计。
在传统的训练-测试集划分中,数据被划分为训练集和测试集,然后使用训练集训练模型,使用测试集评估模型性能。然而,这种方法可能因为数据的划分方式而导致评估结果不稳定,特别是在数据量有限的情况下。交叉验证通过将数据划分为多个折(folds),多次进行训练和测试,从而克服了这些问题。
以下是交叉验证的常见方法:
- k折交叉验证(k-Fold Cross-Validation):
- 将数据分为k个大小相似的折(folds)。
- 每次将其中一个折作为验证集,其他k-1个折作为训练集。
- 重复这个过程k次,每次选择不同的折作为验证集,其他折作为训练集。
- 计算k次验证的平均性能作为最终性能评估。
- 留一交叉验证(Leave-One-Out Cross-Validation,LOOCV):
- 将每个样本单独作为一个折,其他样本作为训练集。
- 执行n次训练和验证,n为样本数量。
- 计算n次验证的平均性能作为最终性能评估。
- 适用于小样本数据集,但计算开销较大。
- 随机折交叉验证(Stratified k-Fold Cross-Validation):
- 类似于k折交叉验证,但在划分折时会保持各个类别的比例相同。
- 对于不均衡的数据集,这种方法可以更好地保持类别分布。
交叉验证的优势在于它能够提供更可靠的模型性能估计,因为每个样本都会被用于训练和验证,减少了数据划分可能引发的偶然性影响。交叉验证还有助于选择合适的模型和调整超参数,从而提高模型的泛化性能。在实际应用中,k折交叉验证是最常用的方法之一,但根据问题的特点和数据集的大小,选择适当的交叉验证方法非常重要。
为什么需要交叉验证
交叉验证目的:为了让被评估的模型更加准确可信
数据处理
一般情况下,数据分为训练集和测试集,但是为了让从训练得到模型结果更加准确。
做以下处理:
- 训练集:训练集+验证集
- 测试集:测试集
那么对于之前的Facebook签到位置预测问题的k值,如何取得一个合理的值?下面使用超参数搜索-网格搜索(Grid Search)
3、⭐超参数搜索-网格搜索(Grid Search)
介绍
超参数网格搜索(Grid Search)是一种常用的超参数调优方法,用于寻找最佳的超参数组合,从而优化机器学习模型的性能。它通过在预定义的超参数空间中搜索所有可能的组合,然后评估每个组合的性能,最终选择性能最佳的组合作为最终的超参数设置。
以下是超参数网格搜索的步骤和原理:
- 超参数空间定义: 首先,为模型选择要调优的超参数,并为每个超参数指定可能的取值范围。例如,对于支持向量机,可以选择C(正则化参数)和kernel(核函数类型)作为需要调优的超参数,为它们指定一组候选取值。
- 生成网格: 将每个超参数的可能取值组合成一个网格,生成所有可能的超参数组合。这个网格中的每个点都代表一组超参数设置。
- 交叉验证: 对于每个超参数组合,使用交叉验证来评估模型在验证集上的性能。通常使用k折交叉验证,对于每个超参数组合,训练模型k次,并计算平均性能指标。
- 选择最佳组合: 根据交叉验证的结果,选择性能最佳的超参数组合作为最终的选择。通常根据准确率、F1得分、均方误差等评价指标来衡量性能。
- 应用最佳超参数: 使用在步骤4中选择的最佳超参数组合来训练模型,然后在独立的测试集上评估其性能。
超参数网格搜索的优点在于它是一种简单而有效的方法,可以在有限的计算资源下尝试多种超参数组合。然而,网格搜索的缺点是它可能会对计算资源造成较大的负担,特别是在超参数空间较大时。为了提高效率,可以使用随机搜索等方法来在超参数空间中采样,以更快地找到性能较好的超参数组合。
API
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
对估计器的指定参数值进行详尽搜索
estimator:估计器对象
param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
cv:指定几折交叉验证
fit:输入训练数据
score:准确率
结果分析:
bestscore:在交叉验证中验证的最好结果
bestestimator:最好的参数模型
cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果
🔺Facebook签到位置预测K值调优
使用网格搜索估计器,在原来的KNN算法实现Facebook签到位置预测的代码基础上,新的修改如下代码:
# 使用网格搜索和交叉验证找到合适的参数
knn = KNeighborsClassifier()param = {"n_neighbors": [3, 5, 10]}gc = GridSearchCV(knn, param_grid=param, cv=2)gc.fit(x_train, y_train)print("选择了某个模型测试集当中预测的准确率为:", gc.score(x_test, y_test))# 训练验证集的结果
print("在交叉验证当中验证的最好结果:", gc.best_score_)
print("gc选择了的模型K值是:", gc.best_estimator_)
print("每次交叉验证的结果为:", gc.cv_results_)
代码解释:
创建KNN分类器:knn = KNeighborsClassifier()
定义超参数空间:param = {"n_neighbors": [3, 5, 10]}
创建GridSearchCV实例,传入KNN分类器实例和定义好的超参数空间,cv=2表示使用2折交叉验证:gc = GridSearchCV(knn, param_grid=param, cv=2)
执行网格搜索和交叉验证:gc.fit(x_train, y_train)
评估测试集性能,使用训练好的网格搜索模型在测试集上进行预测并输出准确率:print("选择了某个模型测试集当中预测的准确率为:", gc.score(x_test, y_test))
打印交叉验证结果:
- gc.best_score_:输出在交叉验证中获得的最佳性能指标。
- gc.best_estimator_:输出最佳性能对应的模型,包括超参数设置。
- gc.cv_results_:输出每次交叉验证的结果,包括参数设置和性能指标。
回顾k值交叉验证:
KNN调优全部代码:
# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2023/8/30 23:48
import pandas as pd
from sklearn.model_selection import train_test_split # 将数据集分割为训练集和测试集。
from sklearn.neighbors import KNeighborsClassifier # 实现KNN分类器
from sklearn.preprocessing import StandardScaler # 特征标准化
from sklearn.model_selection import GridSearchCV # 网格搜索'''
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)对估计器的指定参数值进行详尽搜索estimator:估计器对象param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}cv:指定几折交叉验证fit:输入训练数据score:准确率
结果分析:bestscore:在交叉验证中验证的最好结果_bestestimator:最好的参数模型cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果
'''
def knn_GridSearch():"""K近邻算法预测入住位置类别:return:"""# 一、处理数据以及特征工程# 1、读取收,缩小数据的范围data = pd.read_csv("./data/FBlocation/train.csv")# 数据逻辑筛选操作 df.query()data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")# 删除time这一列特征data = data.drop(['time'], axis=1)print(data)# 删除入住次数少于三次位置place_count = data.groupby('place_id').count()tf = place_count[place_count.row_id > 3].reset_index()data = data[data['place_id'].isin(tf.place_id)]# 3、取出特征值和目标值y = data['place_id']# y = data[['place_id']]x = data.drop(['place_id', 'row_id'], axis=1)# 4、数据分割与特征工程?# (1)、数据分割x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)# (2)、标准化std = StandardScaler()# 队训练集进行标准化操作x_train = std.fit_transform(x_train)print(x_train)# 进行测试集的标准化操作x_test = std.fit_transform(x_test)# 二、算法的输入训练预测# K值:算法传入参数不定的值 理论上:k = 根号(样本数)# K值:后面会使用参数调优方法,去轮流试出最好的参数[1,3,5,10,20,100,200]# 使用网格搜索和交叉验证找到合适的参数knn = KNeighborsClassifier()param = {"n_neighbors": [3, 5, 10]}gc = GridSearchCV(knn, param_grid=param, cv=2)gc.fit(x_train, y_train)print("选择了某个模型测试集当中预测的准确率为:", gc.score(x_test, y_test))# 训练验证集的结果print("在交叉验证当中验证的最好结果:", gc.best_score_)print("gc选择了的模型K值是:", gc.best_estimator_)print("每次交叉验证的结果为:", gc.cv_results_)if __name__ == '__main__':knn_GridSearch()
执行结果:
相关文章:
分类算法系列③:模型选择与调优 (Facebook签到位置预测)
目录 模型选择与调优 1、介绍 模型选择(Model Selection): 调优(Hyperparameter Tuning): 本章重点 2、交叉验证 介绍 为什么需要交叉验证 数据处理 3、⭐超参数搜索-网格搜索(Grid Search) 介绍…...
PCL RANSAC分割提取多个空间圆
目录 一、概述二、代码实现三、结果展示1、原始数据2、提取结果四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 使用PCL分割提取多个空间圆,其核心原理仍然是RANSAC拟合空间圆,这里只是做简单修改…...
Java八股文学习笔记day01
01.和equals区别 对于字符串变量来说,使用""和"equals"比较字符串时,其比较方法不同。""比较两个变量本身的值,即两个对象在内存中的首地址,"equals"比较字符串包含内容是否相同。 对于非…...
vant的NavBar导航栏可以自定义背景图片吗
可以的,Vant的NavBar导航栏提供了一个background-image属性,可以设置自定义背景图片。例 如: <van-nav-bar title"标题" left-text"返回" left-arrow background-image"url(https://example.com/image.jpg)&qu…...
深入浅出AXI协议(5)——数据读写结构读写响应结构
目录 一、前言 二、写选通(Write strobes) 三、窄传输(Narrow transfers) 1、示例1 2、示例2 四、字节不变性(Byte invariance) 五、未对齐的传输(Unaligned transfers) 六…...
IntelliJ Idea开发Vue遇到的几个问题
IntelliJ Idea开发Vue遇到的几个问题 确保 idea已安装插件【Vue.js】 问题1:ts方法错误 或 提示导入 import xxx.vue标红 解决办法:在 env.d.ts中添加以下代码(若无此文件,重新创建): /* eslint-disable */ declare module *.…...
sql查找最晚一天/日期最大的一条记录 两种方法
例:查找最晚入职员工的所有信息 建表: CREATE TABLE employees ( emp_no int(11) NOT NULL, birth_date date NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender char(1) NOT NULL, hire_date date NOT NULL, PRIMA…...
详解python的
详解& 在Python中,使用&符号可以求取两种数据类型的交集: 集合(Set):你可以使用&来计算两个集合的交集。例如: set1 {1, 2, 3, 4} set2 {3, 4, 5, 6} common_elements set1 & set2 pri…...
Modbus TCP通信笔记
目录 1 Modbus TCP 数据协议1.1 数据格式1.2 报文头(MBAP头)1.3 功能码1.4 Modbus 地址映射到 CPU 地址 2 Modbus TCP 通讯数据示例2.1 功能码01 读离散输出线圈2.2 功能码02 读离散输入线圈2.3 功能码03 读保持寄存器2.4 功能码04 读输入寄存器2.5 功能码05 写单个离散输出寄存…...
CIM和websockt-实现实时消息通信:双人聊天和消息列表展示
欢迎大佬的来访,给大佬奉茶 一、文章背景 有一个业务需求是:实现一个聊天室,我和对方可以聊天;以及有一个消息列表展示我和对方(多个人)的聊天信息和及时接收到对方发来的消息并展示在列表上。 项目框架概…...
useLayoutEffect和useEffect有什么作用?
useEffect 和 useLayoutEffect 都是 React 中的钩子函数,用于在组件渲染过程中执行副作用操作。它们的主要区别在于执行时机。 useEffect: useEffect 是异步执行的,它在浏览器渲染完成之后才执行。这意味着它不会阻塞浏览器的渲染过程,因此适合用于处理副作用,如数据获取、…...
django中配置使用websocket终极解决方案
django ASGI/Channels 启动和 ASGI/daphne的区别 Django ASGI/Channels 是 Django 框架的一个扩展,它提供了异步服务器网关接口(ASGI)协议的支持,以便处理实时应用程序的并发连接。ASGI 是一个用于构建异步 Web 服务器和应用程序…...
敦煌网、Jumia等跨境电商平台怎么测评(补单)留评?
评论的重要性是众所周知的,对于想要做卖家运营的人来说,它直接影响着产品的销量和排名 那么如何通过自养号测评来提升销量和排名呢? 我相信大家对这个问题已经有了一定的了解,拥有大量自养号可以通过这些号来通过关键词搜索、浏…...
uni-app之android离线打包
一 AndroidStudio创建项目 1.1,上一节演示了uni-app云打包,下面演示怎样androidStudio离线打包。在AndroidStudio里面新建空项目 1.2,下载uni-app离线SDK,离线SDK主要用于App本地离线打包及扩展原生能力,SDK下载链接h…...
【传输层】TCP -- 三次握手四次挥手 | 可靠性与提高性能策略
超时重传机制连接管理机制三次握手四次挥手滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议理解 listen 的第二个参数 超时重传机制 主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B࿱…...
前端将UTC时间格式转化为本地时间格式~~uniapp写法
UTC时间格式是什么 首先我们先简单的了解一下:UTC时间(协调世界时,Coordinated Universal Time)使用24小时制,以小时、分钟、秒和毫秒来表示时间 HH:mm:ss.SSSHH 表示小时,取值范围为00到23。mm 表示分钟…...
说说Kappa架构
分析&回答 对于实时数仓而言,Lmabda架构有很明显的不足,首先同时维护两套系统,资源占用率高,其次这两套系统的数据处理逻辑相同,代码重复开发。 能否有一种架构,只需要维护一套系统,就可以…...
项目介绍:《Online ChatRoom》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合
在当今数字化社会,即时通讯已成为人们生活中不可或缺的一部分。为了满足这一需求,我开发了一个名为"WeTalk"的聊天室项目,该项目基于Spring Boot、MyBatis、MySQL和WebSocket技术,为用户提供了一个实时交流的平台。在本…...
Vue3 学习 组合式API setup语法糖 响应式 指令 DIFF(一)
文章目录 前言一、Composition Api二、setup语法糖三、响应式refreactive 四、其他一些关键点v-prev-oncev-memov-cloak 五、虚拟Dom五、diff算法 前言 本文用于记录学习Vue3的过程 一、Composition Api 我觉得首先VUE3最大的改变就是对于代码书写的改变,从原来选择…...
一文轻松入门DeepSort
1.背景 Deepsort是目标检测任务的后续任务,得益于Yolo系列的大放异彩,DeepSort目标追踪任务的精度也不断提高,同时,DeepSort属于目标追踪任务中的多目标追踪,即MOT(Multiple Object Tracking,M…...
关于linux openssl的自签证书认证与nginx配置
自签文档链接 重点注意这块,不能写一样的,要是一样的话登录界面锁会报不安全 域名这块跟最后发布的一致 nginx配置的话 server {listen 443 ssl; //ssl 说明为https 默认端口为443server_name www.skyys.com; //跟openssl设置的域名保持一致s…...
Mybatis--关联关系映射
目录: 1.什么是关联关系映射: 一对一和多对多的区别 2.mybaits中的一对一&一对多关联关系配置 配置generatoeConfig文件 插件自动生成 编辑 写sql语句 创建 Ordermapper类 编写接口类 编辑 编写接口实现类 编写测试类 测试结果 一对…...
Golang基本的网络编程
Go语言基本的Web服务器实现 Go 语言中的 http 包提供了创建 http 服务或者访问 http 服务所需要的能力,不需要额外的依赖。 Go语言在Web服务器中主要使用到了 “net/http” 库函数,通过分析请求的URL来实现参数的接收。 下面介绍了http 中Web应用的基本…...
Postgresql的一个bug_涉及归档和pg_wal
故障描述: 服务器ocmpgdbprod1,是流复制主节点,它的从节点是ocmpgdbprod2,两个节点的Postgresql数据库版本都是PostgreSQL 11.6,主节点ocmpgdbprod1配置了pg_wal归档,从节点ocmpgdbprod2没有配置pg_wal归档…...
轻量、便捷、高效—经纬恒润AETP助力车载以太网测试
随着自动驾驶技术和智能座舱的不断发展,高宽带、高速率的数据通信对主干网提出了稳定、高效的传输要求,CAN(FD)、LIN已无法充分满足汽车的通信需求。车载以太网作为一种快速且扩展性好的网络技术,已经逐步成为了汽车主干网的首选。 此外&…...
【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)
系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...
综合实训-------成绩管理系统 V1.1
综合实训-------成绩管理系统 V1.1 1、一维数组数据double 2、我们用元素的位置来当学号。 1、录入数据 【5个数据】或【通过文件的方式取数据】 2、显示数据 3、添加一条记录 4、修改一条记录 5、删除一条记录 6、查找一条记录。【输入学号,显示成绩】 7、统计。【…...
13.108.Spark 优化、Spark优化与hive的区别、SparkSQL启动参数调优、四川任务优化实践:执行效率提升50%以上
13.108.Spark 优化 1.1.25.Spark优化与hive的区别 1.1.26.SparkSQL启动参数调优 1.1.27.四川任务优化实践:执行效率提升50%以上 13.108.Spark 优化: 1.1.25.Spark优化与hive的区别 先理解spark与mapreduce的本质区别,算子之间(…...
大模型综述论文笔记6-15
这里写自定义目录标题 KeywordsBackgroud for LLMsTechnical Evolution of GPT-series ModelsResearch of OpenAI on LLMs can be roughly divided into the following stagesEarly ExplorationsCapacity LeapCapacity EnhancementThe Milestones of Language Models Resources…...
树的介绍(C语言版)
前言 在数据结构中树是一种很重要的数据结构,很多其他的数据结构和算法都是通过树衍生出来的,比如:堆,AVL树,红黑色等本质上都是一棵树,他们只是树的一种特殊结构,还有其他比如linux系统的文件系…...
个人网站可以做企业宣传/域名注册哪个网站好
1.美国大学列表 https://university.graduateshotline.com/ubystate.html 2.获取浏览器 user agent 信息 https://www.whatismybrowser.com/detect/what-is-my-user-agent —————————————————————————————— 转载于:https://www.cnblogs.com/hebol…...
o2o网站建设特色/杭州网站优化公司
来自<<深入理解c11 c11新特性解析与应用>> 代码见:https://github.com/Jeromecen/cpp11study/tree/master I、保持语言的稳定性和兼容性” 总结:主要是utf8字符串,虚函数override/final支持。 1、c11宏和类型(考虑和c99兼容&…...
买了个域名 如何自己做网站/新闻营销
windbg的设置与XP一样在WIN7或者Vista里的设置为:在以管理员身份运行的 cmd 下键入并执行命令:(每行一条命令) bcdedit /bootdebug ON bcdedit /debug ON bcdedit /dbgsettings serial baudrate:115200 debugport:1bcdedit /copy …...
常州网站制作公司排名/抖音搜索seo排名优化
初级 fun() 全局对象window obj.sayName扩展 1this是什么 任何函数本质上都是通过某个对象调用的,如果没有指定就是window 所有函数内部都有一个变量this 它的值是调用函数的当前对象 2如何确定this的值 test()…...
网站建设怎样把网页连接起来/沈阳seo推广
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 基本思路:建立一个包含K个元素的大顶堆。 注:python中貌似只能直接建小顶堆。 # -*- coding:utf-8 -*- class Solution:def …...
报社新闻网站建设方案/关键词搜索引擎
近日,无论是国内运营商还是国外运营商,都打出来一个名词——无限套餐流量。 据了解,目前美国的主要移动运营商都已经开始提供无限流量套餐,消费者将不再需要在蜂窝网络和WiFi之间来回切换,来避免高昂的流量费。 国内运…...