小白python入门 - 66. 机器学习地图0. 写给同学的话你好。从这一课开始我们进入「机器学习」这一小段。你前面已经会用 Python、pandas 做清洗、透视、出图——那些是在描述「数据里发生了什么」。机器学习要多走一步在历史数据里找规律用来猜测还没见过的新样本。项目说明本节目标分清 AI / ML / DL知道监督任务长什么样会划分训练/测试集理解过拟合用 scikit-learn 完成第一次fit学完能干什么能听懂同事说的「训个模型」「别过拟合」能判断一个问题要不要上 ML能跑通 sklearn 最小闭环预计时间阅读 40–60 分钟敲代码 30–40 分钟前置会 Python 基础、能读简单表格pandas 有一点印象更好但本课代码可独立运行一句话心态机器学习不是魔法是「用数据调参数让预测在新数据上也好用」。先把地图画清楚后面 67–75 课才不会迷路。1. 生活里的例子 / 背景想象三种日常问题会不会下雨看湿度、温度、气压猜「下 / 不下」——这是分类答案是类别。这套房大概多少钱面积、地段、楼龄 → 猜一个数字——这是回归答案是连续数值。超市顾客能不能分成几群没有「正确标签」只想按消费习惯分群——这是聚类无监督的一种。你以前可能用if-else写规则ifamount10000andis_foreign:risk高规则能写清时不必上机器学习。但现实里常常是规则写不完、边界模糊、要同时看几十个字段。这时让算法从已标注历史里学一个「从特征到标签」的映射往往更省事。再举一个校园例子场景特征输入标签要猜的类型预测是否挂科出勤、作业分、期中分挂 / 不挂分类预测期末分数同上0–100 分回归给选修课推荐分班兴趣问卷、历史选课无固定标签先分群聚类共性用过去的模式推断新样本——而不是为每一种情况手写规则。2. 核心概念白话 表格 相关图2.1 AI、ML、DL 是什么关系媒体上「AI」什么都往里塞。对你来说记住三层洋葱就够层次大白话例子AI人工智能让机器表现得「有点聪明」的大筐规划路线、下棋、识别人脸、聊天ML机器学习用数据改进表现而不是把全部规则写死垃圾邮件过滤、房价预测、推荐列表DL深度学习ML 的一种用很深的神经网络自动学「怎么表示数据」图像分类、语音识别、大语言模型关系可以记成AI ⊃ ML ⊃ DL大致如此DL 是 ML 的子集ML 是实现 AI 的重要路径之一。黑话立刻翻译黑话大白话模型一坨参数 一套计算方式输入特征输出预测训练 / 拟合 (fit)用数据把参数调到「在训练样本上表现好」推理 / 预测 (predict)训练完后对新样本吐答案特征 (feature)模型看到的输入列如年龄、金额、点击次数标签 / 目标 (label / target)你想预测的那一列如是否流失、房价样本 (sample / instance)表格里的一行泛化 (generalization)在没见过的数据上仍然好用而不只是背答案2.2 Mitchell 的 T / E / P经典定义计算机科学家 Tom Mitchell 有一句被教材反复引用的话大意一个程序在任务T上通过经验E改进了性能度量P就说它在学习。字母含义垃圾邮件例子T任务是什么判断一封邮件是不是垃圾邮件E经验从哪来历史上人工标注好的邮件P怎么算「变好了」准确率、召回率、F1 等你自己做项目时可以强迫自己填这三格——填不清说明问题还没定义好。2.3 任务地图监督、无监督……范式有没有标签典型问题本系列覆盖监督学习有分类、回归66–71、75 重点无监督学习无聚类、降维72 扫盲半监督少量有标签标注贵时的变通点名即可自监督自己从数据造「伪标签」预训练大模型常见了解即可强化学习奖励信号不是固定标签表游戏 AI、机器人本阶段不覆盖监督学习再拆两刀最重要类型标签长什么样问题口吻后文分类类别是/否、A/B/C「属于哪一类」68 课回归连续数房价、温度「大概是多少」69 课2.4 训练集 vs 测试集考试不能偷看答案如果你用全部数据又训练又打分模型可能把答案背下来分数虚高。正确做法先把数据随机分成两份常见 8:2 或 7:3。训练集只用来学参数。测试集学完之后只用来打分一次模拟「新数据」。集合能不能用来 fit干什么用训练集 train能调参数、学规律测试集 test不能估最终表现验证集 valid后面会讲一般不直接当最终分选模型、调超参数黑话train_test_split 把表切成「练习册」和「期末卷」。2.5 过拟合与欠拟合现象训练表现测试表现大白话欠拟合 underfit差差太笨了连练习册都没学会刚好好也好学会了规律不是死记过拟合 overfit很好很差把练习册答案背下来了换卷子就懵常见诱因先有印象即可模型太复杂 数据太少 → 容易过拟合特征太少 / 模型太简单 → 容易欠拟合数据泄漏测试信息偷偷进了训练→ 测试分假高上线崩——67 课重点打2.6 一张图看懂 ML 工作流业务问题 → 是否适合 ML → 定义 T/E/P → 拿数据、清洗口径 → 划分 train / test → 特征与预处理67 → 选模型、训练 fit → 在 test 上评估 → 不够好就迭代够好再谈上线743. 算法 / 流程用图说清楚本课不深入某个具体算法的数学只把「第一次监督学习」的流程钉死。3.1 监督分类的抽象流程特征 X 标签 y ┌──────────────┐ ┌──────────┐ │ 年龄 收入 点击 │ ... │ 是否购买 │ └──────────────┘ └──────────┘ \ / \ / v v ┌─────────────────────────┐ │ 训练算法如逻辑回归 │ │ 学到参数 w, b ... │ └─────────────────────────┘ | v 新用户特征 X_new | v 预测 ŷ买/不买3.2 你这节课要亲手走的最小闭环1. 装 scikit-learn 2. 加载一个玩具数据集鸢尾花 iris 3. train_test_split 4. 创建模型 → fit(X_train, y_train) 5. predict(X_test) → 和真实 y_test 比一比 6. 打印准确率accuracy——先有个分数感鸢尾花数据150 朵花4 个特征花萼长宽、花瓣长宽3 个品种。经典到发霉但第一次 fit 最合适——表小、跑得快、不用下载外部文件。3.3 何时不要用机器学习更合适的做法场景规则 / 配置「金额 1 万且异地 → 转人工」写得清清楚楚SQL / 报表只要汇总、排名、漏斗不需要「预测新行」简单启发式样本极少比如总共 20 条、噪声极大、标签定义都吵不清换人沟通问题其实是流程/口径不是预测记住有数据 ≠ 必须 ML。ML 有成本要标数据、要维护、会过时、会出离谱预测。能规则解决就规则。4. 手把手环境与代码4.1 安装建议在虚拟环境里装路径按你本机习惯改# Windows PowerShell 示例python-mvenv .venv .\.venv\Scripts\Activate.ps1 pipinstall-Uscikit-learn pandas numpy验证importsklearnprint(sklearn.__version__)# 预期输出形态类似 1.5.x 或 1.6.x 的版本号字符串4.2 第一次机器学习鸢尾花分类把下面整段复制到day66_first_fit.py运行。fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.neighborsimportKNeighborsClassifierfromsklearn.metricsimportaccuracy_score# 1) 加载数据irisload_iris()Xiris.data# 形状 (150, 4)150 朵花4 个特征yiris.target# 形状 (150,)0/1/2 三个品种print(特征名:,iris.feature_names)print(类别名:,iris.target_names)print(X 形状:,X.shape,y 形状:,y.shape)# 2) 先划分random_state 固定随机种子方便复现X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.25,random_state42,stratifyy)print(训练样本数:,len(y_train),测试样本数:,len(y_test))# 3) 选一个简单模型k 近邻「看最近的 k 个邻居投票」——68 课细讲modelKNeighborsClassifier(n_neighbors5)# 4) 训练只看训练集model.fit(X_train,y_train)# 5) 预测只在测试集上打分y_predmodel.predict(X_test)accaccuracy_score(y_test,y_pred)print(测试集准确率:,round(acc,3))# 6) 看几条「真实 vs 预测」foriinrange(5):print(f真实{iris.target_names[y_test[i]]:10s}预测{iris.target_names[y_pred[i]]})预期输出形态数字可能因版本略有差异但结构类似特征名: [sepal length (cm), sepal width (cm), petal length (cm), petal width (cm)] 类别名: [setosa versicolor virginica] X 形状: (150, 4) y 形状: (150,) 训练样本数: 112 测试样本数: 38 测试集准确率: 0.947 真实setosa 预测setosa ...读代码时盯住三件事fit的参数是训练的 X、y。predict用的是测试的 X。accuracy_score比较的是测试的真实 y 和预测 y。4.3 故意「作弊」看一眼过拟合直觉对比实验下面演示如果用同一批数据既训练又评价分数会偏乐观玩具数据上差别可能不大但习惯要先养成。# 续接上一节的 model / X / y# 坏习惯在全部数据上 fit 再在全部数据上打分badKNeighborsClassifier(n_neighbors1)# k1 更容易死记硬背bad.fit(X,y)print(全数据自测准确率:,accuracy_score(y,bad.predict(X)))# 预期常常非常高甚至 1.0——因为几乎在背训练集# 好习惯只用测试集评价重新划分后X_tr,X_te,y_tr,y_tetrain_test_split(X,y,test_size0.25,random_state0)bad.fit(X_tr,y_tr)print(测试集准确率:,accuracy_score(y_te,bad.predict(X_te)))# 预期通常低于「全数据自测」4.4 用 pandas 看一眼表长什么样可选importpandasaspd dfpd.DataFrame(X,columnsiris.feature_names)df[label]y df[species]df[label].map(dict(enumerate(iris.target_names)))print(df.head())print(df[species].value_counts())预期前 5 行数值表 三个品种各 50 条左右的计数。4.5 最小「自己造」的监督例子帮助建立直觉不依赖 sklearn 数据集手写 6 个点体会 fit/predictfromsklearn.treeimportDecisionTreeClassifier# 特征[[学习小时, 作业完成率]]X_tiny[[1,0.2],[2,0.3],[3,0.5],[6,0.8],[7,0.9],[8,1.0],]# 标签0可能挂科, 1可能通过y_tiny[0,0,0,1,1,1]clfDecisionTreeClassifier(max_depth2,random_state0)clf.fit(X_tiny,y_tiny)print(clf.predict([[2.5,0.4]]))# 预期偏 0print(clf.predict([[7.5,0.95]]))# 预期偏 1这只是玩具真实挂科预测要合法合规、特征要充分、评估要严谨——这里只为理解「输入数字 → 输出类别」。5. 常见坑大白话坑你会看到什么正确直觉GIGO垃圾进垃圾出模型一本正经地错先把口径、缺失、重复行搞定脏数据训不出好模型只看训练集分数汇报 99%上线 60%永远留一块「没见过」的测试数据测试集反复调参用烂测试分也虚高测试集尽量「最后看一眼」中间用验证集/交叉验证71 课把聊天机器人当一切5000 行订单表去微调大模型表格监督任务先 sklearn / 树模型标签定义打架同一个人有时算流失有时不算先和业务把 y 的定义钉死相关当因果「模型说广告导致购买」预测可以相关因果要额外设计别乱归因样本太少硬上深度学习训不动或过拟合夸张小表经典 ML 往往更稳忘记业务目标准确率很高但没用先问错一次的代价是什么特别提醒鸢尾花准确率 0.95 不代表你「很懂 ML」——它只说明流程跑通了。真实项目难在数据、泄漏、指标和落地。6. 对照表、小结6.1 概念速查概念一句话AI让机器表现智能的大领域ML用数据改进任务表现DL用深度神经网络做 ML 的一条路特征 / 标签输入 / 要预测的目标训练 / 测试学参数 / 估新数据表现过拟合背题换卷不行欠拟合题都没学会T/E/P任务 / 经验 / 性能度量6.2 已学 vs 本课起数据分析阶段机器学习阶段描述「发生了什么」预测「未见样本会怎样」指标口径、可复现报告训练-评估纪律、过拟合意识SQL/pandas 规则与聚合模型从数据中估计映射6.3 本节你应该能复述的三句话ML 是用经验 E 在任务 T 上改进指标 P不是魔法。必须划分训练/测试关心的是泛化。能用规则就别硬上模型表格任务先从 sklearn 闭环练起。7. 小练笔由易到难题 1概念用自己的话填空预测「明天是否迟到」是 ____ 问题预测「明天迟到多少分钟」更像 ____ 问题。题 2T/E/P为「识别校园网垃圾邮件」写出 T、E、P 各一句话。题 3划分为什么test_size0.2之后不能再拿测试集去做fit用「考试」打个比方回答。题 4代码把第 4.2 节的n_neighbors改成 1 和 15分别打印测试准确率。观察是不是邻居数越大一定越好不必深究原因68 课会讲。题 5判断下列哪些更适合先用规则而不是 ML说明理由。A. 订单金额超过 5 万必须双人复核B. 根据 30 个行为特征预测用户 7 日内是否流失C. 统计本月各院系图书馆借阅量 Top10参考思路勿直接背答案当作业1 分类 / 回归。2 T判垃圾邮件E历史标注邮件P准确率或 F1。3 测试集是期末卷练过就不是「新题」。4 自行跑。5 A、C 偏规则/统计B 偏监督分类。8. 下一课预告67. 特征与预处理你会遇到数值有的是「岁」、有的是「万元」量纲差很多类别字段要变成数字还有一个致命坑——数据泄漏测试信息偷偷漏进训练。下一课用大白话讲StandardScaler、OneHotEncoder、ColumnTransformer和Pipeline让预处理可复现、少踩坑。引用与参考Tom M. Mitchell,Machine Learning, McGraw-Hill, 1997.T/E/P 经典表述常引自此scikit-learn 用户指南https://scikit-learn.org/stable/user_guide.htmlscikit-learn 入门教程https://scikit-learn.org/stable/tutorial/basic/tutorial.htmltrain_test_split文档https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.htmlIris 数据集说明https://scikit-learn.org/stable/datasets/toy_dataset.html#iris-plants-dataset过拟合概念sklearn 模型复杂度讨论https://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting.htmlWikipedia - Machine learninghttps://en.wikipedia.org/wiki/Machine_learningGoogle 机器学习速成课程中文https://developers.google.com/machine-learning/crash-course再讲一个完整小故事把概念串起来假设你在学生会做活动报名系统想预测「报名了但会不会到场」。问题到场 / 不到场 → 这是分类。数据往期报名表年级、是否干部、报名距活动天数、历史缺席次数……以及是否到场。切开70% 当习题训练30% 假装是下一次活动的新人测试。训练让模型从习题里找规律。评估看测试集上是不是经常把「会来的人」错判成「不来」漏报还是把「不来的人」错判成「会来」误报。决策如果物资有限你可能更怕误报准备了座位却空着如果是重要讲座你可能更怕漏报。你会发现算法名字不重要问题定义和错了会怎样才重要。这正是第 66 课想送给你的第一块砖。若你用规则也能搞定例如「历史缺席≥3 就默认不来」那就先写规则——机器学习不是必修仪式。课堂讨论题可分组 10 分钟如果老板只要一个数字「准确率」你怎么用两分钟说服他看混淆矩阵数据只有 80 条你还上机器学习吗为什么你更愿意维护100 条清晰业务规则还是一个 90 分但没人能解释的模型把讨论结论写在笔记里——比多抄 50 行 API 更接近真实工作。自我检测不看稿口头答我能不看笔记讲清本课最重要的一张图在说什么我能指出一段「错误代码」错在哪我能举一个生活例子对应本课任务类型我知道下一课大概要解决什么痛点全部打勾再进入下一课效率更高。附录给同学的 FAQ本课补充下面这些问题是第一次学本课内容时最容易卡住的地方。用白话再过一遍。Q1我是不是一定要背公式不必先背公式。你要先会讲故事输入是什么、输出是什么、模型在怕什么过拟合、泄漏、指标骗人。公式是为了精确表达故事故事通了公式只是翻译。Q2代码跑不通怎么办按这个顺序排查虚拟环境激活了吗提示符前有没有 .venv包装了吗python -c “import sklearn; print(sklearn.version)”报错最后一行是什么把Error 类型 最后一行记下来再搜路径、文件名、中文引号有没有混用仍不行换一个最小例子本课最前面的 10 行代码确认环境 OKQ3我和同学分数差很多是不是我很差不一定。可能是andom_state 不同、数据划分不同、指标不同、甚至泄漏导致虚高。先对齐评估协议再比分数。Q4这课和「人工智能 / ChatGPT」是什么关系ChatGPT 一类是很大的深度学习系统偏语言与对话。本课练的是表格/经典机器学习基本功分类、回归、评估、Pipeline。基本功会了你以后学深度学习或用大模型 API才知道自己在解决什么问题、如何公平比较。Q5我需要买 GPU 吗本阶段不需要。sklearn 在普通笔记本 CPU 上就够。GPU 主要是深度学习训练时才刚需。Q6作业要做到什么程度算合格最低标准能用自己的话讲清本课 3 个核心概念能跑通本课主线代码并看懂输出含义能指出至少 2 个常见坑小练笔完成一半以上鼓励全做Q7我想继续深入课外看什么优先官方文档对应章节见文末引用其次 ISLR 中文/英文入门章节。别一上来就啃很厚的证明书——容易劝退。本课概念速记卡可抄笔记本我用大白话怎么说对应术语用历史数据猜新情况机器学习 / 预测拿来学的那部分数据训练集假装是新客户的那部分测试集背答案背过头过拟合笨到学不会欠拟合偷看了考题数据泄漏步骤焊成一条龙Pipeline建议学习节奏时间做什么第 1 小时只读例子与图不写代码第 2 小时抄跑主线代码改一个参数观察变化第 3 小时做小练笔 写 5 句笔记之后隔一天不看稿子复述一遍记住大一阶段「讲清楚 跑得通 知道坑」比「一次记住全部 API」重要得多。