Python打卡第11天
浙大疏锦行001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280importwarningsimportlightgbm as lgbimportmatplotlib.pyplot as pltimportnumpy as npimportpandas as pdfromsklearn.metricsimportaccuracy_scorefromsklearn.model_selectionimportGridSearchCV, RandomizedSearchCV, train_test_splitfromsklearn.neighborsimportKNeighborsClassifierfromsklearn.preprocessingimportLabelEncoder, StandardScalerfromskoptimportBayesSearchCVwarnings.filterwarnings(ignore)plt.rcParams[font.sans-serif][SimHei,Microsoft YaHei]# 优先黑体备选微软雅黑plt.rcParams[axes.unicode_minus]False# 解决坐标轴负号显示方框问题datapd.read_csv(rD:\Desktop\Postgraduate\PythonStudy\Python打卡训练营\Python打卡训练营\python60-days-challenge-master\data.csv)# 读取数据# print(data.info())col_cn_dict{Id:编号,Home Ownership:房屋产权情况,Annual Income:年收入,Years in current job:现工作任职年限,Tax Liens:税务留置次数,Number of Open Accounts:未结清账户数量,Years of Credit History:信用历史年限,Maximum Open Credit:最大开放授信额度,Number of Credit Problems:信用问题次数,Months since last delinquent:上次逾期距今月数,Bankruptcies:破产记录次数,Purpose:贷款用途,Term:贷款期限,Current Loan Amount:当前贷款金额,Current Credit Balance:当前信贷余额,Monthly Debt:月负债,Credit Score:信用评分,Credit Default:是否违约}datadata.rename(columnscol_cn_dict)# print(data.info())# print(data[现工作任职年限].value_counts())defpreprocess_credit_data(data, test_size0.2, random_state42):信贷违约数据完整预处理流程返回: X_train, X_test, y_train, y_test# 1. 划分特征与标签 Xdata.drop(columns[是否违约,编号])# 编号无预测意义丢弃ydata[是否违约]# 2. 划分训练集 / 测试集 X_train, X_test, y_train, y_testtrain_test_split(X, y, test_sizetest_size, random_staterandom_state, stratifyy)# stratifyy 保证训练/测试集中违约比例一致# 3. 区分离散 / 连续特征 discrete_colsX_train.select_dtypes(include[object]).columns.tolist()continuous_colsX_train.select_dtypes(include[np.number]).columns.tolist()special_col现工作任职年限ifspecial_colindiscrete_cols:discrete_cols.remove(special_col)# 任职年限单独字典映射# 4. 缺失值填充 # 连续特征 → 中位数只用训练集统计量防泄露forcolincontinuous_cols:median_valX_train[col].median()X_train[col]X_train[col].fillna(median_val)X_test[col]X_test[col].fillna(median_val)# 离散特征(含任职年限) → 众数forcolindiscrete_cols[special_col]:mode_valX_train[col].mode()[0]X_train[col]X_train[col].fillna(mode_val)X_test[col]X_test[col].fillna(mode_val)# 5. 现工作任职年限字典映射 job_years_map{ 1 year:0,1 year:1,2 years:2,3 years:3,4 years:4,5 years:5,6 years:6,7 years:7,8 years:8,9 years:9,10 years:11,}X_train[special_col]X_train[special_col].map(job_years_map).astype(int)X_test[special_col]X_test[special_col].map(job_years_map).astype(int)# 6. 其余离散特征编码 # 有序特征贷款期限短期 长期→ 标签编码# 无序特征房屋产权情况、贷款用途 → 独热编码ordinal_cols[贷款期限]nominal_cols[cforcindiscrete_colsifcnotinordinal_cols]# 6.1 有序特征 LabelEncoderforcolinordinal_cols:leLabelEncoder()X_train[col]le.fit_transform(X_train[col])X_test[col]le.transform(X_test[col])# 6.2 无序特征 One-Hot测试集按训练集列对齐防止列数不一致X_trainpd.get_dummies(X_train, columnsnominal_cols, drop_firstTrue)X_testpd.get_dummies(X_test, columnsnominal_cols, drop_firstTrue)X_testX_test.reindex(columnsX_train.columns, fill_value0)# 7. 异常值处理IQR 截断不删样本 # 对连续特征 映射后的任职年限做截断独热列和0/1标签列不动outlier_colscontinuous_cols[special_col]forcolinoutlier_cols:Q1X_train[col].quantile(0.25)Q3X_train[col].quantile(0.75)IQRQ3-Q1lower, upperQ1-1.5*IQR, Q31.5*IQRX_train[col]X_train[col].clip(lowerlower, upperupper)X_test[col]X_test[col].clip(lowerlower, upperupper)# 8. 标准化 # 选择 StandardScaler已做 IQR 截断异常值影响可控# 信贷数据右偏明显StandardScaler 比 MinMax 更稳健且适配逻辑回归/SVM/NN# 独热列保持 0/1 不缩放仅缩放连续/有序数值列onehot_cols[cforcinX_train.columnsifany(c.startswith(nc_)forncinnominal_cols)]scale_cols[cforcinX_train.columnsifcnotinonehot_cols]scalerStandardScaler()X_train[scale_cols]scaler.fit_transform(X_train[scale_cols])X_test[scale_cols]scaler.transform(X_test[scale_cols])returnX_train, X_test, y_train, y_test# 调用方式 X_train, X_test, y_train, y_testpreprocess_credit_data(data)# 1. 定义保存结果列表 results[]# 2. 通用工具函数保存结果 defrecord_result(model_name, search_name, best_params,X_train, X_test, y_train, y_test, best_estimator):y_pred_trainbest_estimator.predict(X_train)y_pred_testbest_estimator.predict(X_test)acc_trainround(accuracy_score(y_train, y_pred_train),4)acc_testround(accuracy_score(y_test, y_pred_test),4)results.append({模型: model_name,寻优方法: search_name,最优参数: best_params,训练集准确率: acc_train,测试集准确率: acc_test})# 3. KNN 参数空间 knnKNeighborsClassifier()knn_grid{n_neighbors: [3,5,7,9,11],weights: [uniform,distance],p: [1,2]}knn_random{n_neighbors:list(range(3,15)),weights: [uniform,distance],p: [1,2]}knn_bayes{n_neighbors: (3,15),weights: [uniform,distance],p: (1,2)}# -------- KNN - 网格搜索 --------print( KNN 网格搜索 )gs_knnGridSearchCV(knn, knn_grid, cv5, scoringaccuracy, n_jobs-1)gs_knn.fit(X_train, y_train)record_result(KNN,网格搜索, gs_knn.best_params_, X_train, X_test, y_train, y_test, gs_knn.best_estimator_)# -------- KNN - 随机搜索 --------print( KNN 随机搜索 )rs_knnRandomizedSearchCV(knn, knn_random, cv5, scoringaccuracy,n_iter10, random_state42, n_jobs-1)rs_knn.fit(X_train, y_train)record_result(KNN,随机搜索, rs_knn.best_params_, X_train, X_test, y_train, y_test, rs_knn.best_estimator_)# -------- KNN - 贝叶斯优化 --------print( KNN 贝叶斯优化 )bs_knnBayesSearchCV(knn, knn_bayes, cv5, scoringaccuracy,n_iter10, random_state42, n_jobs-1)bs_knn.fit(X_train, y_train)record_result(KNN,贝叶斯优化, bs_knn.best_params_, X_train, X_test, y_train, y_test, bs_knn.best_estimator_)# 4. LightGBM 参数空间 lgb_clflgb.LGBMClassifier(random_state42, verbosity-1)lgb_grid{learning_rate: [0.01,0.05,0.1],n_estimators: [50,100,200],max_depth: [3,5,7]}lgb_random{learning_rate: np.logspace(-3,-1,10),n_estimators:list(range(50,300,20)),max_depth:list(range(2,10)),subsample: [0.6,0.7,0.8,0.9,1.0]}lgb_bayes{learning_rate: (1e-3,0.3,log-uniform),n_estimators: (50,300),max_depth: (2,10),subsample: (0.6,1.0)}# -------- LightGBM - 网格搜索 --------print( LightGBM 网格搜索 )gs_lgbGridSearchCV(lgb_clf, lgb_grid, cv5, scoringaccuracy, n_jobs-1)gs_lgb.fit(X_train, y_train)record_result(LightGBM,网格搜索, gs_lgb.best_params_, X_train, X_test, y_train, y_test, gs_lgb.best_estimator_)# -------- LightGBM - 随机搜索 --------print( LightGBM 随机搜索 )rs_lgbRandomizedSearchCV(lgb_clf, lgb_random, cv5, scoringaccuracy,n_iter10, random_state42, n_jobs-1)rs_lgb.fit(X_train, y_train)record_result(LightGBM,随机搜索, rs_lgb.best_params_, X_train, X_test, y_train, y_test, rs_lgb.best_estimator_)# -------- LightGBM - 贝叶斯优化 --------print( LightGBM 贝叶斯优化 )bs_lgbBayesSearchCV(lgb_clf, lgb_bayes, cv5, scoringaccuracy,n_iter10, random_state42, n_jobs-1)bs_lgb.fit(X_train, y_train)record_result(LightGBM,贝叶斯优化, bs_lgb.best_params_, X_train, X_test, y_train, y_test, bs_lgb.best_estimator_)# 5. 输出汇总对比表格 df_resultpd.DataFrame(results)# 让 Pandas 在终端中正确计算中文字符宽度避免表头错位pd.set_option(display.unicode.east_asian_width,True)pd.set_option(display.unicode.ambiguous_as_wide,True)# 主表只展示适合横向比较的字段较长的参数字典放到下方分行显示summary_columns[模型,寻优方法,训练集准确率,测试集准确率]df_summarydf_result[summary_columns].copy()accuracy_formatters{训练集准确率:lambdavalue: f{value:.2%},测试集准确率:lambdavalue: f{value:.2%},}print(\n*72)print(【各模型不同超参数寻优方法结果汇总表】)print(*72)print(df_summary.to_string(indexFalse,justifycenter,col_space{模型:12,寻优方法:12},formattersaccuracy_formatters,))print(\n【各模型最优参数明细】)print(-*72)forresultinresults:print(f{result[模型]} - {result[寻优方法]})forparam_name, param_valueinresult[最优参数].items():print(f {param_name}: {param_value})print()

相关新闻

C++模板编译模型解析与多文件项目实战指南

C++模板编译模型解析与多文件项目实战指南

1. 项目概述&#xff1a;为什么C模板是绕不开的坎&#xff1f;刚接触C的朋友&#xff0c;学到STL容器&#xff08;比如vector<int>&#xff09;或者算法&#xff08;比如sort&#xff09;的时候&#xff0c;心里多半会冒出一个问号&#xff1a;这玩意儿是怎么做到既能存整…

2026/8/23 7:31:47 阅读更多 →
移动硬盘选购指南:从100到1300元,如何根据需求选择HDD与SSD

移动硬盘选购指南:从100到1300元,如何根据需求选择HDD与SSD

最近整理素材库&#xff0c;发现一个挺有意思的现象&#xff1a;我手头攒了不下七八块移动硬盘&#xff0c;从最早的古董级机械盘到最新的雷电4固态&#xff0c;每一块都对应着一段不同的工作流。有的盘里塞满了陈年项目备份&#xff0c;几年没动过&#xff1b;有的盘则每天跟着…

2026/8/23 7:31:47 阅读更多 →
anti-slop 使用教程:Oxlint 规则拦截 AI 低质量代码 TypeScript 代码质量详解

anti-slop 使用教程:Oxlint 规则拦截 AI 低质量代码 TypeScript 代码质量详解

GitHub 3.1k Star&#xff1a;anti-slop 从零部署完整教程 新手照着做就能跑起来 效率工具指南 原创教程摘要&#xff1a;anti-slop 是 GitHub 3.1k Star 的 Oxlint 规则插件&#xff0c;拦截 TypeScript/JavaScript 代码中的"低证据"模式&#xff08;AI slop&…

2026/8/23 7:31:47 阅读更多 →

最新新闻

dictionary项目main.jl源码逐行精讲:用状态机解析29MB纯文本生成8.6万条JSON定义

dictionary项目main.jl源码逐行精讲:用状态机解析29MB纯文本生成8.6万条JSON定义

dictionary项目main.jl源码逐行精讲&#xff1a;用状态机解析29MB纯文本生成8.6万条JSON定义 【免费下载链接】dictionary A JSON representation of Websters Unabridged Dictionary 项目地址: https://gitcode.com/gh_mirrors/dictio/dictionary dictionary 是一个用 …

2026/8/23 12:08:49 阅读更多 →
MIRTH:基于互信息与时序枢纽的跨模态智能体协同推理架构解析

MIRTH:基于互信息与时序枢纽的跨模态智能体协同推理架构解析

1. 项目概述&#xff1a;当智能体学会“看、说、做”的协同推理最近在折腾具身智能和跨模态智能体&#xff0c;发现一个核心瓶颈&#xff1a;如何让一个智能体真正理解它“看到”的视觉信息、“听到”的语言指令&#xff0c;并“规划”出正确的物理动作序列&#xff1f;这不仅仅…

2026/8/23 12:08:49 阅读更多 →
i64与i128深度解析:从原理到实战的性能与精度权衡

i64与i128深度解析:从原理到实战的性能与精度权衡

1. 项目概述&#xff1a;从i64与i128说起在编程和数据处理的日常里&#xff0c;我们经常和数字打交道。从简单的计数器到复杂的科学计算&#xff0c;数字的“容器”——数据类型&#xff0c;决定了我们能处理多大的数、多精确的数&#xff0c;以及为此付出的性能代价。今天想聊…

2026/8/23 12:08:49 阅读更多 →
前端开发者实战ESP32-Cam:从零构建Web无线视频监控系统

前端开发者实战ESP32-Cam:从零构建Web无线视频监控系统

1. 项目概述&#xff1a;当Web前端遇见嵌入式摄像头作为一名在Web前端领域摸爬滚打了十多年的开发者&#xff0c;我的日常工作就是和HTML、CSS、JavaScript打交道&#xff0c;构建一个个运行在浏览器里的精美界面。但时间久了&#xff0c;心里总会冒出点“跨界”的念头&#xf…

2026/8/23 12:08:49 阅读更多 →
系统动力学与优化建模:从草原放牧策略看复杂系统求解

系统动力学与优化建模:从草原放牧策略看复杂系统求解

1. 项目概述&#xff1a;从一道赛题看现实世界的优化难题 每年研究生数学建模竞赛的赛题&#xff0c;都是对现实世界复杂问题的一次高度抽象和浓缩。2022年的E题“草原放牧策略研究”&#xff0c;乍一看像是一个生态学或农业经济学的问题&#xff0c;但实际上&#xff0c;它是一…

2026/8/23 12:08:48 阅读更多 →
YOLOSHOW:免费跑通 YOLO 目标检测图形界面

YOLOSHOW:免费跑通 YOLO 目标检测图形界面

YOLOSHOW&#xff1a;免费跑通 YOLO 目标检测图形界面 【免费下载链接】YOLOSHOW YOLO SHOW - YOLOv11 / YOLOv10 / YOLOv9 / YOLOv8 / YOLOv7 / YOLOv5 / RTDETR / SAM / MobileSAM / FastSAM YOLO GUI based on Pyside6 项目地址: https://gitcode.com/gh_mirrors/yo/YOLOS…

2026/8/23 12:07:48 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →