机器学习笔记(二)模型评估与特征工程实操
一、为什么需要模型评估训练出来的模型准确率高不代表它就是一个好模型。一个常见陷阱是过拟合模型在训练集上表现完美但面对新数据时一塌糊涂。模型评估的核心目标是回答一个问题——这个模型能不能在未知数据上稳定可靠地工作。1.1 过拟合 vs 欠拟合现象表现原因解决方案过拟合训练集准、测试集差模型太复杂增加数据、正则化、降低复杂度欠拟合训练集和测试集都差模型太简单增加特征、换更复杂模型1.2 评估指标体系不同任务需要不同的评估指标准确率不是万能的指标公式适用场景准确率正确数 / 总数类别均衡精确率TP / (TP FP)关注误报代价垃圾邮件召回率TP / (TP FN)关注漏报代价疾病检测F1值精确率与召回率的调和平均精确率与召回率需兼顾TP 真正例FP 假正例FN 假负例TN 真负例二、交叉验证实操2.1 为什么简单划分不够单次 train_test_split 的结果受随机种子影响可能偏乐观或偏悲观。K 折交叉验证将数据分成 K 份轮流用其中 1 份做测试、其余做训练最终取平均结果更可靠。2.2 代码实操K 折交叉验证fromsklearn.datasetsimportload_breast_cancerfromsklearn.model_selectionimportcross_val_score,StratifiedKFoldfromsklearn.ensembleimportRandomForestClassifierfromsklearn.preprocessingimportStandardScalerfromsklearn.pipelineimportPipelineimportnumpyasnp# 加载数据dataload_breast_cancer()X,ydata.data,data.target# 用 Pipeline 封装标准化 模型避免数据泄露pipelinePipeline([(scaler,StandardScaler()),(rf,RandomForestClassifier(n_estimators100,random_state42))])# 5 折分层交叉验证cvStratifiedKFold(n_splits5,shuffleTrue,random_state42)scorescross_val_score(pipeline,X,y,cvcv,scoringf1)print(f各折 F1 值:{scores})print(f平均 F1 值:{scores.mean():.4f}/-{scores.std():.4f})输出结果各折 F1 值: [0.9722 0.9722 0.9861 0.9653 0.9861] 平均 F1 值: 0.9764 /- 0.00802.3 学习曲线分析学习曲线展示训练集大小与模型表现的关系是诊断过拟合/欠拟合的利器fromsklearn.model_selectionimportlearning_curveimportmatplotlib.pyplotasplt train_sizes,train_scores,val_scoreslearning_curve(pipeline,X,y,cv5,train_sizesnp.linspace(0.1,1.0,10),scoringf1,n_jobs-1)train_meantrain_scores.mean(axis1)val_meanval_scores.mean(axis1)plt.figure(figsize(10,6))plt.plot(train_sizes,train_mean,o-,color#FF6B6B,labelTraining F1)plt.plot(train_sizes,val_mean,o-,color#4D96FF,labelValidation F1)plt.xlabel(Training Set Size,fontsize12)plt.ylabel(F1 Score,fontsize12)plt.title(Learning Curve,fontsize14)plt.legend(fontsize12)plt.grid(True,alpha0.3)plt.tight_layout()plt.savefig(learning_curve.png,dpi150,bbox_inchestight)plt.show()如何判读学习曲线训练线高、验证线低两线差距大 →过拟合两条线都低差距小 →欠拟合两条线都高且接近 →理想状态三、特征工程实操3.1 特征工程的核心地位业界有一句名言数据和特征决定了机器学习的上限模型和算法只是逼近这个上限。特征工程的质量直接决定最终效果。3.2 数值型特征处理importpandasaspdimportnumpyasnpfromsklearn.preprocessingimportStandardScaler,MinMaxScaler,RobustScaler# 模拟数据np.random.seed(42)datapd.DataFrame({age:np.random.normal(35,10,1000).clip(18,70),income:np.random.lognormal(10,1,1000),# 偏态分布score:np.random.uniform(0,100,1000)})# 方式一标准化均值为0标准差为1—— 适合大多数场景scaler_stdStandardScaler()data_stdscaler_std.fit_transform(data)# 方式二归一化缩放到0-1—— 适合距离类算法scaler_minmaxMinMaxScaler()data_minmaxscaler_minmax.fit_transform(data)# 方式三稳健缩放用中位数和四分位距—— 适合有离群值的数据scaler_robustRobustScaler()data_robustscaler_robust.fit_transform(data)3.3 特征选择fromsklearn.feature_selectionimportSelectKBest,f_classif,mutual_info_classiffromsklearn.ensembleimportRandomForestClassifier# 方式一方差分析F检验选择 Top-K 特征selector_fSelectKBest(f_classif,k10)X_selected_fselector_f.fit_transform(X,y)selected_features_fdata.feature_names[selector_f.get_support()]print(F检验选出的特征:,list(selected_features_f))# 方式二随机森林特征重要性rfRandomForestClassifier(n_estimators100,random_state42)rf.fit(X,y)importancesrf.feature_importances_ top10_idxnp.argsort(importances)[::-1][:10]print(\n随机森林 Top10 重要特征:)foriintop10_idx:print(f{data.feature_names[i]:30s}{importances[i]:.4f})# 方式三互信息法能捕捉非线性关系selector_miSelectKBest(mutual_info_classif,k10)X_selected_miselector_mi.fit_transform(X,y)selected_features_midata.feature_names[selector_mi.get_support()]print(\n互信息选出的特征:,list(selected_features_mi))3.4 特征选择策略对比方法原理优势局限方差分析 F 检验线性相关性计算快只能发现线性关系互信息法信息论统计量能发现非线性关系计算量较大随机森林重要性分裂增益统计准确、通用需训练完整模型递归特征消除 RFE逐步剔除效果好计算开销最大四、综合实战完整 Pipeline 流程将上述知识整合为一个完整的机器学习 Pipeline这也是实际项目中的标准做法fromsklearn.pipelineimportPipelinefromsklearn.model_selectionimportcross_val_score,GridSearchCVfromsklearn.preprocessingimportStandardScalerfromsklearn.feature_selectionimportSelectKBest,f_classiffromsklearn.ensembleimportRandomForestClassifierfromsklearn.datasetsimportload_breast_cancerimportnumpyasnp# 加载数据dataload_breast_cancer()X,ydata.data,data.target# 构建 Pipeline标准化 - 特征选择 - 随机森林pipelinePipeline([(scaler,StandardScaler()),(feature_selection,SelectKBest(f_classif)),(classifier,RandomForestClassifier(random_state42))])# 网格搜索调参param_grid{feature_selection__k:[10,15,20,all],classifier__n_estimators:[50,100,200],classifier__max_depth:[4,6,8,None]}gridGridSearchCV(pipeline,param_grid,cv5,scoringf1,n_jobs-1)grid.fit(X,y)print(f最佳参数:{grid.best_params_})print(f最佳 F1 值:{grid.best_score_:.4f})# 查看参数组合的详细结果resultspd.DataFrame(grid.cv_results_)for_,rowinresults.nsmallest(5,rank_test_score).iterrows():print(fF1{row[mean_test_score]:.4f}| fk{row[params][feature_selection__k]}, fn_est{row[params][classifier__n_estimators]}, fdepth{row[params][classifier__max_depth]})五、小结模型评估不是可选项交叉验证是衡量模型泛化能力的标准方法学习曲线是诊断过拟合/欠拟合的第一工具比单纯看准确率更有价值特征工程决定模型上限三种缩放方式各有所长按数据特征选择Pipeline将预处理、特征选择、模型训练封装为整体既防止数据泄露又方便调参网格搜索 交叉验证是调参的黄金组合实际项目中几乎必用

相关新闻

肌电数据处理实战06:膝关节康复动作的真实 sEMG 姿态评估

肌电数据处理实战06:膝关节康复动作的真实 sEMG 姿态评估

案例来源:KneE-PAD: Knee Rehabilitation Exercises for Postural Assessment Dataset 数据集链接:https://zenodo.org/records/12112951 DOI:10.5281/zenodo.12112951 作者:本案例基于 KneE-PAD 真实公开数据集,使用 Delsys Trigno Avanti 表面肌电系统采集 难度:⭐⭐⭐…

2026/7/23 4:29:56 阅读更多 →
【HumanScale】重新定义预训练数据

【HumanScale】重新定义预训练数据

问题提出与实验设计: 预训练阶段更缺动作对齐还是世界覆盖?北大HumanScale给出反直觉回答:第一视角人类视频可能是更好的预训练数据源。作者固定模型架构、预训练时长、后训练数据,只替换预训练数据源,将HumanNet的500…

2026/7/23 4:28:56 阅读更多 →
山东专升本:27届计算机考点汇总(共217个考点)

山东专升本:27届计算机考点汇总(共217个考点)

2026/7/23 4:28:56 阅读更多 →

最新新闻

Dify HTTP请求节点:智能API集成与性能优化实践

Dify HTTP请求节点:智能API集成与性能优化实践

1. Dify HTTP请求节点核心功能解析HTTP请求节点是Dify工作流编排中的关键连接器,它让AI应用具备了与外部世界交互的能力。这个节点的设计理念是"用最简单的方式处理最复杂的集成需求"——我经过半年多的实际项目验证,发现它确实能覆盖90%以上的…

2026/7/23 5:08:10 阅读更多 →
Qwen3.8-max-Preview代码生成能力实测:从算法到Web项目的AI编程实践

Qwen3.8-max-Preview代码生成能力实测:从算法到Web项目的AI编程实践

在实际编程工作中,无论是快速原型开发、代码重构还是解决复杂算法问题,AI 辅助编码工具正在成为开发者的重要助手。最近发布的 Qwen3.8-max-Preview 模型在代码生成能力上表现出色,特别是在与 K3 模型的对比测试中展现了更强的实用性和准确性…

2026/7/23 5:08:10 阅读更多 →
Unity大场景性能优化:从诊断到实战的完整解决方案

Unity大场景性能优化:从诊断到实战的完整解决方案

1. 项目概述:当你的Unity大场景开始“喘气”做Unity开发,尤其是开放世界、大地图MMO或者高精度模拟这类项目,最怕听到的两个字就是“卡顿”。那种感觉就像你开着一辆性能车,一脚油门下去,发动机轰鸣,但车却…

2026/7/23 5:08:10 阅读更多 →
百度网盘-同步网盘-webDAV

百度网盘-同步网盘-webDAV

前言 有这样一个需求,一些软件可以通过 webDAV 的方式进行数据备份,百度云没有webDAV 但是有同步网盘,我一般是将一些软件的数据直接放到同步网盘中去,但是一些软件并没有这样的功能指定数据目录 ,所以利用 AI 开发了一…

2026/7/23 5:08:10 阅读更多 →
C++递归性能优化:从栈溢出到高效算法的实战策略

C++递归性能优化:从栈溢出到高效算法的实战策略

1. 项目概述:递归的性能困境与优化契机递归,这个在算法教科书里被奉为圭臬的编程范式,在实际的C项目开发中,却常常让开发者又爱又恨。爱它,是因为它能将复杂问题(比如遍历树形结构、解决汉诺塔、计算斐波那…

2026/7/23 5:08:10 阅读更多 →
Excel SCAN函数实战:5大职场数据处理技巧

Excel SCAN函数实战:5大职场数据处理技巧

1. SCAN函数基础解析:Excel中的隐藏利器SCAN函数是Excel 365和2021版本中引入的全新动态数组函数,它本质上是一个"累加器",能够对数组中的每个元素依次应用LAMBDA函数,并记录每次运算的中间结果。这个功能听起来简单&am…

2026/7/23 5:07:10 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻