DAY11@浙大疏锦行

笔记:

参数优化步骤:

1.在调参前,先建立基线模型:

- 使用**默认参数**训练模型

- 记录性能指标作为**对比基准**

- 后续调参效果以此为参照

2.对参数进行定义

1️⃣ 网格搜索 (GridSearchCV)

- 需要定义参数的**固定列表**(param_grid)

- 尝试所有可能的参数组合

- ⚠️ 计算成本高,参数多时组合呈指数级增长

2️⃣ 随机搜索 (RandomizedSearchCV)

- 定义参数的**分布范围**

- 随机采样指定次数(如 50-100 次)

- ✅ 对于给定计算预算,通常比网格搜索更有效

3️⃣ 贝叶斯优化 (BayesSearchCV)

- 定义参数的**搜索空间**

- 根据先验结果建立概率模型(高斯过程)

- 智能选择下一个最有潜力的参数组合

- ✅ 通常用更少迭代达到更好效果

3.创建调参方法的对象

4.在训练集上进行该方法

5.使用最佳参数的模型进行预测

作业:

1.调包:

import pandas as pd import pandas as pd #用于数据处理和分析,可处理表格数据。 import numpy as np #用于数值计算,提供了高效的数组操作。 import matplotlib.pyplot as plt #用于绘制各种类型的图表 import seaborn as sns #基于matplotlib的高级绘图库,能绘制更美观的统计图形。 import warnings warnings.filterwarnings('ignore') #忽略警告信息,保持输出清洁。 # 设置中文字体(解决中文显示问题) plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows系统常用黑体字体 plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 data = pd.read_csv(r'data.csv')

2.预处理:

# 先筛选字符串变量 discrete_features = data.select_dtypes(include=['object']).columns.tolist() # Home Ownership 标签编码 home_ownership_mapping = { 'Own Home': 1, 'Rent': 2, 'Have Mortgage': 3, 'Home Mortgage': 4 } data['Home Ownership'] = data['Home Ownership'].map(home_ownership_mapping) # Years in current job 标签编码 years_in_job_mapping = { '< 1 year': 1, '1 year': 2, '2 years': 3, '3 years': 4, '4 years': 5, '5 years': 6, '6 years': 7, '7 years': 8, '8 years': 9, '9 years': 10, '10+ years': 11 } data['Years in current job'] = data['Years in current job'].map(years_in_job_mapping) # Purpose 独热编码,记得需要将bool类型转换为数值 data = pd.get_dummies(data, columns=['Purpose']) data2 = pd.read_csv(r'data.csv') # 重新读取数据,用来做列名对比 list_final = [] # 新建一个空列表,用于存放独热编码后新增的特征名 for i in data.columns: if i not in data2.columns: list_final.append(i) # 这里打印出来的就是独热编码后的特征名 for i in list_final: data[i] = data[i].astype(int) # 这里的i就是独热编码后的特征名 # Term 0 - 1 映射 term_mapping = { 'Short Term': 0, 'Long Term': 1 } data['Term'] = data['Term'].map(term_mapping) data.rename(columns={'Term': 'Long Term'}, inplace=True) # 重命名列 continuous_features = data.select_dtypes(include=['int64', 'float64']).columns.tolist() #把筛选出来的列名转换成列表 # 连续特征用中位数补全 for feature in continuous_features: mode_value = data[feature].mode()[0] #获取该列的众数。 data[feature].fillna(mode_value, inplace=True) #用众数填充该列的缺失值,inplace=True表示直接在原数据上修改。

3.划分训练测试集

from sklearn.model_selection import train_test_split X = data.drop(['Credit Default'], axis=1) # 特征,axis=1表示按列删除 y = data['Credit Default'] # 标签 # 按照8:2划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 80%训练集,20%测试集

4.调包

from sklearn.svm import SVC #支持向量机分类器 from sklearn.neighbors import KNeighborsClassifier #K近邻分类器 from sklearn.linear_model import LogisticRegression #逻辑回归分类器 import xgboost as xgb #XGBoost分类器 import lightgbm as lgb #LightGBM分类器 from sklearn.ensemble import RandomForestClassifier #随机森林分类器 from catboost import CatBoostClassifier #CatBoost分类器 from sklearn.tree import DecisionTreeClassifier #决策树分类器 from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯分类器 from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标 from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵 import warnings #用于忽略警告信息 warnings.filterwarnings("ignore") # 忽略所有警告信息

5.默认参数knn (训练集 -> 测试集) ---

print("--- 1. 默认参数knn (训练集 -> 测试集) ---") import time # 这里介绍一个新的库,time库,主要用于时间相关的操作,因为调参需要很长时间,记录下会帮助后人知道大概的时长 start_time = time.time() # 记录开始时间 knn_model = KNeighborsClassifier() knn_model.fit(X_train, y_train) knn_pred = knn_model.predict(X_test) end_time = time.time() # 记录结束时间 print(f"训练与预测耗时: {end_time - start_time:.4f} 秒") print("\n默认knn 在测试集上的分类报告:") print(classification_report(y_test, knn_pred)) print("默认knn 在测试集上的混淆矩阵:") print(confusion_matrix(y_test, knn_pred))

6.网格搜索优化knn

import os # 必须导入:设置环境变量 import tempfile # 必须导入:创建临时文件夹 # ========== 解决Windows中文路径编码问题 ========== os.environ['JOBLIB_TEMP_FOLDER'] = tempfile.mkdtemp(dir='D:\\') # 若D盘不存在,改为C:\\ os.environ['PYTHONIOENCODING'] = 'utf-8' print("\n--- 2. 网格搜索优化knn (训练集 -> 测试集) ---") from sklearn.model_selection import GridSearchCV # 定义要搜索的参数网格 param_grid = { 'n_neighbors': [1, 3, 5, 7, 9, 11, 13, 15], 'weights': ['uniform', 'distance'], 'metric': ['euclidean', 'manhattan'] } # 创建网格搜索对象 knn = KNeighborsClassifier() grid_search = GridSearchCV( estimator=knn, # 第1个参数 param_grid=param_grid, # 第2个参数 cv=5, # 5折交叉验证 scoring='accuracy', # 分类评分指标 n_jobs=-1, # 并行加速 verbose=1 # 最后一个参数不要加多余逗号(Python3虽兼容,但易报错) ) # 步骤4:执行网格搜索 start_time = time.time() grid_search.fit(X_train, y_train) end_time = time.time() # 在训练集上进行网格搜索 grid_search.fit(X_train, y_train) # 在训练集上训练,模型实例化和训练的方法都被封装在这个网格搜索对象里了 end_time = time.time() print(f"网格搜索耗时: {end_time - start_time:.4f} 秒") print("最佳参数: ", grid_search.best_params_) #best_params_属性返回最佳参数组合 # 使用最佳参数的模型进行预测 best_model = grid_search.best_estimator_ # 获取最佳模型 best_pred = best_model.predict(X_test) # 在测试集上进行预测 print("\n网格搜索优化后的随机森林 在测试集上的分类报告:") print(classification_report(y_test, best_pred)) print("网格搜索优化后的随机森林 在测试集上的混淆矩阵:") print(confusion_matrix(y_test, best_pred))

7.贝叶斯优化knn (训练集 -> 测试集) ---

print("\n--- 2. 贝叶斯优化knn (训练集 -> 测试集) ---") from skopt.space import Categorical # 先导入Categorical from skopt import BayesSearchCV from skopt.space import Integer from sklearn.metrics import classification_report, confusion_matrix import time # 定义要搜索的参数空间 param_space = { 'n_neighbors': Integer(low=1, high=20, name='n_neighbors'), # K值:1~20 'weights': Categorical(['uniform', 'distance'], name='weights'), # 权重 'metric': Categorical(['euclidean', 'manhattan'], name='metric') # 距离 } # 初始化贝叶斯优化器 knn = KNeighborsClassifier() bayes_search = BayesSearchCV( estimator=knn, search_spaces=param_space, # 传入正确的参数空间 n_iter=30, cv=5, scoring='accuracy', random_state=42, n_jobs=1, verbose=1 ) start_time = time.time() # 在训练集上进行贝叶斯优化搜索 bayes_search.fit(X_train, y_train) end_time = time.time() print(f"贝叶斯优化耗时: {end_time - start_time:.4f} 秒") print("最佳参数: ", bayes_search.best_params_) # 使用最佳参数的模型进行预测 best_model = bayes_search.best_estimator_ best_pred = best_model.predict(X_test) print(f"贝叶斯优化耗时: {end_time - start_time:.4f} 秒") print("最佳参数: ", bayes_search.best_params_) print("\n贝叶斯优化后的knn 在测试集上的分类报告:") print(classification_report(y_test, best_pred)) print("贝叶斯优化后的knn 在测试集上的混淆矩阵:") print(confusion_matrix(y_test, best_pred))

8.随机搜索优化knn

# --- 3. 随机搜索优化knn --- print("\n--- 2. 随机搜索优化随机森林 (训练集 -> 测试集) ---") from scipy.stats import randint from sklearn.model_selection import RandomizedSearchCV # 定义参数分布(使用分布而非固定列表) param_distribution = { 'n_neighbors': np.arange(3, 16, 2), # K值:3,5,...,15(奇数避免平局) 'weights': ['uniform', 'distance'], # 权重规则 'metric': ['euclidean', 'manhattan'], # 距离度量 'p': [1, 2] # 闵可夫斯基距离幂次(可选) } # 创建随机搜索对象 knn = KNeighborsClassifier() random_search = RandomizedSearchCV( estimator=knn, param_distributions=param_distribution, # 随机搜索的参数空间(而非网格列表) n_iter=20, # 随机采样20次(核心参数!) cv=5, # 5折交叉验证 scoring='accuracy', # 分类任务评分指标 random_state=42, # 固定种子,保证可复现 n_jobs=-1, # 单进程(Windows避免编码问题) verbose=1 # 输出进度日志 ) start_time = time.time() # 在训练集上进行随机搜索 random_search.fit(X_train, y_train) end_time = time.time() print(f"随机搜索耗时: {end_time - start_time:.4f} 秒") print("最佳参数: ", random_search.best_params_) # 使用最佳参数的模型进行预测 best_model_random = random_search.best_estimator_ best_pred_random = best_model_random.predict(X_test) print("\n随机搜索优化后的knn 在测试集上的分类报告:") print(classification_report(y_test, best_pred_random)) print("随机搜索优化后的knn 在测试集上的混淆矩阵:") print(confusion_matrix(y_test, best_pred_random))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1014768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1分钟升级Nature正刊中的蛋白质跨膜结构域

买家秀 R9AP 的 N 端定位于细胞表面。通过 TMHMM预测 R9AP 的定位。 卖家秀 DeepTMHMM 预测的拓扑结构 输入 >sp|Q6ZS82|R9BP_HUMAN Regulator of G-protein signaling 9-binding protein OS=Homo sapiens OX=9606 GN=RGS9BP PE=1 SV=1 MAREECKALLDGLNKTTACYHHLVLTVGGSAD…

MC Workbench6.4电机位置控制

MC Workbench6.4电机位置控制 之前的 MC Workbench 版本一直缺少原生位置控制功能&#xff0c;给电机控制开发带来不少不便。而 6.4 版本终于补齐了这个短板&#xff0c;本文就带大家一步步实现 STM32G431 电机开发板的位置控制&#xff0c;从工程创建到实际运行全程详解&…

30、Nagios配置与使用全攻略

Nagios配置与使用全攻略 1. Nagios配置基础 Nagios的所有配置都通过“Configuration”选项卡完成。GroundWork将自身配置信息存储在MySQL数据库中。当你在界面上进行更改时,这些更改首先会反映在数据库里。只有当你提交更改后,GroundWork才会将配置转换为单独的Nagios配置文…

分治算法刷题总结

148. 排序链表 两个思路,一种是从顶向下的排序,另外的一种是从低向上的归并排序,归并排序的复杂度是NLogN class Solution {public ListNode sortList(ListNode head) {if (head == null || head.next == null)retu…

IPv4地址与IPv6地址

如大家所了解的&#xff0c;互联网协议地址&#xff08;Internet Protocol Address&#xff0c;简称IP地址&#xff09;&#xff0c;是分配给网络上使用互联网协议&#xff08;IP&#xff09;的每个设备&#xff08;如计算机、服务器、智能手机等&#xff09;的数字标签。IP地址…

Fluent中颗粒流模拟的门道

Fluent的颗粒流 稀疏颗粒常使用DPM模型进行解决 不考虑颗粒碰撞变形&#xff0c;但考虑颗粒之间的碰撞行为&#xff0c;可以使用欧拉颗粒流模型 考虑颗粒碰撞摩擦以及变形&#xff0c;可以使用其内置的DEM模型&#xff0c;也可以采用与其他DEM软件耦合处理 考虑颗粒在运动过程…

31、Ubuntu 服务器虚拟化与 KVM 配置指南

Ubuntu 服务器虚拟化与 KVM 配置指南 在当今的系统管理领域,虚拟化技术无疑是最热门的趋势之一。通过虚拟化,你能够在同一硬件上创建多个 Ubuntu 实例,并且为每个虚拟机分配服务器的部分资源。现代服务器拥有强大的处理能力,借助虚拟化技术,你可以充分挖掘硬件的潜力。本…

官宣:汇纳科技收购华速实业;融速科技完成A+轮融资;3D打印单季破40亿美元|库周报

2025年12月14日&#xff0c;以下是过去一周内3D打印行业发生的事情&#xff0c;包括“大事件” 、“行业动态” 、“趣制造” 、“融资/并购” 、“新产品”等内容。—— 大事件 ——正式官宣&#xff01;汇纳科技收购华速实业12月13日&#xff0c;汇纳科技全资子公司金石汇纳宣…

详谈:解释器模式(二)

接上文。看到这个需求&#xff0c;我们很容易想到一种写法&#xff1a;将输入的字符串分割成单个字符&#xff0c;把数字字符通过switch-case转换为数字&#xff0c;再通过计算符判断是加法还是减法&#xff0c;对应做加、减计算&#xff0c;最后返回结果即可。计划的确可行&am…

新能源逆变器那些事儿:阻抗建模、扫频验证与稳定性分析

并网逆变器阻抗建模&#xff0c;扫频模型扫频验证&#xff0c;仿真模型稳定性分析&#xff0c;功率控制 新能源 变流器 逆变器 虚拟同步控制 逆变器 复现 逆变器阻抗建模及阻抗扫描验证序阻抗建模与稳定性分析 可设置扫描范围、扫描点数 程序附带注释 包括 逆变器仿真模型&…

OpenAI 放大招!GPT-5.2 重磅发布:碾压谷歌 Gemini,替你做 PPT / 写代码,国内这样用最划算

OpenAI放大招&#xff01;GPT-5.2重磅发布&#xff1a;碾压谷歌Gemini&#xff0c;替你做PPT/写代码&#xff0c;国内这样用最划算 昨晚&#xff0c;AI圈炸了&#xff01;OpenAI如期推出新模型GPT-5.2&#xff0c;这次直接瞄准“专业知识型工作”——不管是做PPT、写代码&…

AI时代的云安全(一)新挑战与应对思考

引言 云计算与人工智能的深度融合正在重塑数字基础设施的底层逻辑。当企业竞相将大语言模型、生成式AI服务部署至云端&#xff0c;传统云安全模型正面临前所未有的压力。这种压力并非简单的威胁数量增加&#xff0c;而是源于AI技术特性与云原生架构交织后产生的系统性风险位移—…

中国板材品牌哪家好?山东亦木,环保板材/全屋定制板材/装修环保板材/衣柜专用板材/桦木板/FOSB板/橡胶木/多层板/颗粒板定制实力厂家,老牌子,质量稳定性价比高 - 全局中转站

随着绿色环保理念的深入人心和消费者对家居品质要求的不断提升,优质的板材成为打造健康舒适居家环境的重要基础。在2025年的板材市场中,亦木凭借其创新的商业模式、卓越的产品品质和全方位的赋能服务,成为众多全屋定…

技术满分,增长零分?互联网项目的广告投放破局指南

如果你的团队能攻克复杂的技术架构&#xff0c;却为每月如何稳定获取1000个真实用户而焦虑&#xff0c;那么这篇文章正是为你而写。我们知道&#xff0c;互联网工作室的核心困境往往不在产品本身&#xff0c;而在于 “如何让产品被看见、被使用、被付费” 。你面临的可能不是一…

Java赋能AI智能采编:让百万传媒人提早下班的行业变革方案

Java赋能AI智能采编&#xff1a;让百万传媒人提早下班的行业变革方案 在信息爆炸的今天&#xff0c;传媒行业正面临着“素材多到理不清、稿件改到熬大夜、发布急到踩deadline”的普遍困境。数百万传媒从业者坚守在出版、新闻、广播等岗位上&#xff0c;支撑着年产值超2.5万亿元…

CF1039A Timetable - crazy-

构造 题意 有 \(n\) 辆公交车从车站 A 到车站 B,最短行驶时间为 \(t\)。已知:A 站出发时刻表 \(a_1 < a_2 < \dots < a_n\) 每辆公交车到达 B 站后,B 站会有一个到达时刻表 \(b_1 < b_2 < \dots <…

基于泰坦尼克号数据集的随机森林算法实战

数据预处理 ​ 选取 Pclass &#xff08;船舱等级&#xff09;、 Sex &#xff08;性别&#xff09;、 Age &#xff08;年龄&#xff09;作为特征&#xff0c; Survived &#xff08;是否存活&#xff09;作为标签。 ​用均值填充年龄空值&#xff0c;避免缺失值影响模型训练&…

图片转文字技术(一)从光学识别到智能理解的演进之路

引言 在数字化浪潮中&#xff0c;图片转文字技术已悄然渗透到我们日常生活的方方面面。从手机相册中提取证件信息&#xff0c;到扫描纸质文档生成可编辑文本&#xff1b;从自动驾驶汽车识别路牌&#xff0c;到视障人士通过屏幕阅读器获取图像内容——这项技术的应用场景正在不断…

亿赛通脚本远程调试配置技巧

要进行远程调试&#xff0c;主要是对 Tomcat 和 Java进程 进行调试。以下是针对该系统的远程调试配置方法&#xff1a; 一、Tomcat远程调试配置 1. 修改Tomcat启动脚本 找到Tomcat的启动脚本&#xff08;通常在/esafenet/tomcat/bin/catalina.sh或startup.sh&#xff09;&#…

【大模型预训练】17-分布式并行策略:Tensor并行、Pipeline并行的应用场景

引言在深度学习领域&#xff0c;随着模型复杂性和数据规模的不断增长&#xff0c;传统的单节点计算资源已难以满足高效训练的需求。分布式并行策略因此应运而生&#xff0c;成为提升深度学习训练效率和扩展性的关键手段。其中&#xff0c;Tensor并行和Pipeline并行作为两种主流…