机器学习笔记(一)监督学习与分类算法实操
一、什么是监督学习监督学习是机器学习中最基础、应用最广泛的范式。它的核心思想是给定一组带有标签的训练数据让模型学习输入特征与输出标签之间的映射关系从而对未知数据进行预测。1.1 监督学习的两大任务任务类型输出类型典型算法应用场景分类离散类别KNN、决策树、SVM、逻辑回归垃圾邮件检测、图像识别回归连续数值线性回归、随机森林回归房价预测、销量预测1.2 监督学习通用流程数据准备收集数据划分训练集与测试集特征工程提取有效特征处理缺失值、归一化模型选择根据任务选择合适算法模型训练用训练数据拟合模型参数模型评估用测试集验证泛化能力模型优化调参、集成等手段提升性能二、KNN 算法实操2.1 算法原理KNNK-Nearest Neighbors的核心思想用一句话概括近朱者赤近墨者黑。对于一个未知样本查看它最近的 K 个邻居按多数表决原则决定其类别。K 值选择K 太小容易过拟合K 太大容易欠拟合通常取奇数避免平票距离度量常用欧氏距离、曼哈顿距离优点简单直观无需训练过程缺点计算量大对数据规模敏感2.2 代码实操鸢尾花分类使用 scikit-learn 内置鸢尾花数据集完整演示 KNN 分类的全流程fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerfromsklearn.neighborsimportKNeighborsClassifierfromsklearn.metricsimportaccuracy_score,classification_report# 1. 加载数据irisload_iris()X,yiris.data,iris.target# 2. 划分训练集与测试集8:2X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state42,stratifyy)# 3. 特征标准化KNN 对量纲敏感必须做scalerStandardScaler()X_train_scaledscaler.fit_transform(X_train)X_test_scaledscaler.transform(X_test)# 4. 创建 KNN 模型K5knnKNeighborsClassifier(n_neighbors5)# 5. 训练模型knn.fit(X_train_scaled,y_train)# 6. 预测与评估y_predknn.predict(X_test_scaled)print(f准确率:{accuracy_score(y_test,y_pred):.4f})print(classification_report(y_test,y_pred,target_namesiris.target_names))输出结果准确率: 1.0000 precision recall f1-score support setosa 1.00 1.00 1.00 10 versicolor 1.00 1.00 1.00 10 virginica 1.00 1.00 1.00 10 accuracy 1.00 30 macro avg 1.00 1.00 1.00 30 weighted avg 1.00 1.00 1.00 302.3 K 值选择技巧不同的 K 值会显著影响模型表现。以下代码遍历 K1 到 20观察准确率变化importmatplotlib.pyplotasplt k_rangerange(1,21)scores[]forkink_range:knnKNeighborsClassifier(n_neighborsk)knn.fit(X_train_scaled,y_train)scores.append(accuracy_score(y_test,knn.predict(X_test_scaled)))plt.figure(figsize(10,5))plt.plot(k_range,scores,markero,color#FF6B6B,linewidth2)plt.xlabel(K Value,fontsize12)plt.ylabel(Accuracy,fontsize12)plt.title(KNN K Value vs Accuracy,fontsize14)plt.grid(True,alpha0.3)plt.savefig(knn_k_selection.png,dpi150,bbox_inchestight)plt.show()三、决策树算法实操3.1 算法原理决策树通过一系列规则对数据进行递归划分最终形成一棵树状结构。每个内部节点是一个特征判断条件每个叶子节点是一个类别标签。划分标准基尼系数Gini或信息增益Entropy核心优势可解释性强可输出规则最大深度控制树的复杂度防止过拟合3.2 代码实操乳腺癌诊断分类使用 scikit-learn 内置乳腺癌数据集fromsklearn.datasetsimportload_breast_cancerfromsklearn.treeimportDecisionTreeClassifier,plot_treefromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score,classification_reportimportmatplotlib.pyplotasplt# 1. 加载数据dataload_breast_cancer()X,ydata.data,data.target# 2. 划分数据集X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_state42,stratifyy)# 3. 创建决策树模型限制最大深度4防止过拟合dtDecisionTreeClassifier(max_depth4,random_state42)# 4. 训练dt.fit(X_train,y_train)# 5. 预测与评估y_preddt.predict(X_test)print(f准确率:{accuracy_score(y_test,y_pred):.4f})print(classification_report(y_test,y_pred,target_namesdata.target_names))# 6. 可视化决策树结构plt.figure(figsize(20,8))plot_tree(dt,feature_namesdata.feature_names,class_namesdata.target_names,filledTrue,fontsize8)plt.title(Decision Tree Structure,fontsize14)plt.savefig(decision_tree_structure.png,dpi150,bbox_inchestight)plt.show()3.3 特征重要性分析决策树天然支持输出特征重要性帮助我们理解哪些特征对分类贡献最大importnumpyasnp importancesdt.feature_importances_ indicesnp.argsort(importances)[::-1][:10]# 取 Top10plt.figure(figsize(10,6))colors[#FF6B6B,#FFB347,#FFD93D,#6BCB77,#4D96FF,#9D4EDD,#FF6B9D,#54C6EB,#F9C74F,#90BE6D]barsplt.bar(range(len(indices)),importances[indices],colorcolors)plt.xticks(range(len(indices)),[data.feature_names[i]foriinindices],rotation45,haright)plt.xlabel(Feature,fontsize12)plt.ylabel(Importance,fontsize12)plt.title(Top 10 Feature Importances (Decision Tree),fontsize14)plt.tight_layout()plt.savefig(feature_importance.png,dpi150,bbox_inchestight)plt.show()四、KNN 与决策树对比总结对比维度KNN决策树原理距离表决规则递归划分训练过程无惰性学习有构建决策树预测速度慢逐条计算距离快沿树遍历可解释性弱强可输出规则特征缩放必须标准化不需要适合数据量中小规模中大规模过拟合风险K 小时易过拟合深度大时易过拟合五、小结KNN适合快速原型验证和中小规模数据核心调参是 K 值选择决策树适合需要可解释性的场景核心调参是最大深度和划分标准实际项目中随机森林多棵决策树集成往往是比单棵决策树更优的选择无论用哪种算法特征标准化和交叉验证都是标准操作不可省略

相关新闻

C++多线程异常处理:跨线程传播与资源安全释放实战

C++多线程异常处理:跨线程传播与资源安全释放实战

1. 项目概述:多线程异常处理的挑战与核心在C多线程编程里,异常处理和资源释放是两个让人头疼的老大难问题。单线程环境下,我们通常用try-catch块和RAII(资源获取即初始化)就能把资源管得明明白白,异常一抛&…

2026/7/23 4:34:58 阅读更多 →
Web3.0入门指南:从数字钱包到DApp实践

Web3.0入门指南:从数字钱包到DApp实践

1. Web3.0的本质与核心特征Web3.0并非简单的技术升级,而是一场互联网范式的根本性变革。与Web1.0的"只读"和Web2.0的"读写"模式不同,Web3.0的核心在于"拥有"——用户真正掌握自己的数据资产和数字身份。这种转变的技术基础…

2026/7/23 4:33:58 阅读更多 →
让效率流动起来!手机、平板、电脑互通教程(需借助ToDesk远程控制专业软件使用)

让效率流动起来!手机、平板、电脑互通教程(需借助ToDesk远程控制专业软件使用)

在现如今的生活与办公场景中,我们很少只依赖单一设备,例如会在Mac上设计素材、在Windows电脑处理报表、将平板带在身边做展示、又用手机随时响应紧急需求。然而设备越丰富,“文件孤岛”和“操作断层”等问题反而越突出。其实真正影响效率的&a…

2026/7/23 4:33:58 阅读更多 →

最新新闻

C++实战:从零构建手机通讯录管理系统,掌握面向对象与STL容器应用

C++实战:从零构建手机通讯录管理系统,掌握面向对象与STL容器应用

1. 项目概述与核心价值 最近在整理自己过去几年的C学习笔记,翻到了一个让我印象深刻的“里程碑”项目——手机通讯录管理系统。这不仅仅是一个简单的控制台程序,它是我从零开始,将C的语法、面向对象思想、数据结构以及工程化思维进行第一次综…

2026/7/23 5:14:12 阅读更多 →
VRTK-3.2.1:Unity VR交互开发的模块化框架实战指南

VRTK-3.2.1:Unity VR交互开发的模块化框架实战指南

1. 项目概述:为什么VRTK-3.2.1依然是Unity VR开发的基石如果你正在用Unity做VR项目,尤其是面向PC或一体机平台的交互式应用,那么VRTK这个名字你大概率绕不开。它不是Unity官方的,但在过去几年里,它几乎成了社区里快速搭…

2026/7/23 5:14:12 阅读更多 →
Apple诉OpenAI:AI商业机密纠纷对硬件生态与开发者的影响

Apple诉OpenAI:AI商业机密纠纷对硬件生态与开发者的影响

这次我们来关注一个备受科技圈关注的事件:Apple 对 OpenAI 提起的诉讼。这起案件的核心是商业机密窃取指控,但背后涉及的问题远不止法律纠纷那么简单。对于关注 AI 发展和硬件生态的开发者来说,这场官司可能影响未来技术合作模式、硬件产品路…

2026/7/23 5:14:12 阅读更多 →
C++ std::sort 深度解析:从核心原理到高效实践与性能优化

C++ std::sort 深度解析:从核心原理到高效实践与性能优化

1. 项目概述:为什么你需要深入了解 std::sort?如果你用 C 写过代码,几乎不可能没碰过std::sort。它就像工具箱里那把最趁手的螺丝刀,用起来简单,但你真的了解它的全部能耐和脾气吗?很多人对它的认知停留在“…

2026/7/23 5:14:12 阅读更多 →
深入解析Tiva™ TM4C129 HIB模块:RTC、低功耗与篡改检测实战

深入解析Tiva™ TM4C129 HIB模块:RTC、低功耗与篡改检测实战

1. 项目概述与HIB模块核心价值在物联网终端、智能仪表这类需要长期电池供电的设备里,我们开发者最头疼的两件事,一个是“电不够用”,另一个是“时间不准”或者“数据被意外改动”。我经手过不少项目,设备部署在野外或者无人值守的…

2026/7/23 5:14:12 阅读更多 →
C++ deque内存块配置策略:高性能队列与缓冲区的核心原理

C++ deque内存块配置策略:高性能队列与缓冲区的核心原理

1. 项目概述:为什么是deque? 在C高性能编程的语境下,选择哪个容器往往决定了程序性能的下限。我们经常听到vector、list,但 std::deque (双端队列)却像一个“熟悉的陌生人”——大家都知道它,…

2026/7/23 5:13:12 阅读更多 →

日新闻

从单点好评到指数级传播: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 阅读更多 →

月新闻