news 2026/11/4 2:10:35

《经典机器学习实战》第 2 课:回归入门——环境、工具与数据准备

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《经典机器学习实战》第 2 课:回归入门——环境、工具与数据准备

本文收录于专栏 《经典机器学习实战》

摘要:配好一套全程复用的 conda 环境,用 diabetes 数据集五步跑通第一个线性回归(R² 0.316),再上手 USDA 南瓜真实脏数据:四步清洗 1757 行到 415 行、按蒲式耳归一化价格,学会建模前的可视化侦察。

关键字:线性回归,scikit-learn,数据清洗,pandas,数据可视化,conda环境,最小二乘,特征工程

阶段 2 · 回归(南瓜项目)| 来源:【原·05+06 合并】| 知识更新至 2026-10
本课实战:stage2/assets/stage2_demos.py,【已实测 2026-10】

概念讲解

2.1 环境:一次配好,全程复用

本阶段开始正式写代码。环境只需要配一次,后面所有课全用它:

# conda 是默认推荐路径(依赖解析稳,跨平台一致)conda create-nml-coursepython=3.11scikit-learn pandas matplotlib jupyter flask nltk-yconda activate ml-course# 补充包走 pip(国内镜像加速)pipinstalltextblob statsmodels onnx gym skl2onnx seaborn\-ihttps://pypi.tuna.tsinghua.edu.cn/simple

本课程实测环境:conda envml-course,scikit-learn 1.9.1 / pandas 3.0.6 / matplotlib。编辑器任选:VS Code、VSCodium、PyCharm 或纯命令行都行——本课程的代码全部是顺序执行的脚本,不挑 IDE。

Jupyter Notebook(.ipynb)是数据科学的通用工作方式:代码一格一格写、一格一格跑,格子之间穿插文字和图。它和普通脚本的区别在于交互性——改一行、跑一行、立刻看到输出,适合探索式工作。原课练习以 notebook 形式提供,本课程把同样的代码整理成可粘贴的代码块,notebook 或.py脚本跑都一样。

2.2 Scikit-learn:三行代码的 API 哲学

Scikit-learn 是本课程的主力库。它最出色的设计是所有模型的用法完全同构,学会一个就会全部:

model=SomeModel(...)# 1. 选模型、设参数model.fit(X_train,y_train)# 2. 训练(拟合)pred=model.predict(X_test)# 3. 预测score=model.score(X_test,y_test)# 4. 评估

fit/predict/score三件套贯穿全部课程。以后换任何算法——线性回归、逻辑回归、KNN、SVM、随机森林——代码骨架一行都不用改。

2.3 回归任务:预测数值

监督学习里每个训练样本都有目标值(y),按目标类型分两类:回归(预测数值——房价、气温、南瓜多少钱)和分类(预测类别——是不是巧克力、橙色还是白色)。本课是回归第一站:线性回归——找到一条直线,让数据点到这条线的总误差最小。数学细节下一课展开,本课先把全流程跑通。

两份练习数据:scikit-learn 内置的diabetes(442 名患者 × 10 生理指标,预测一年后病情进展)和 USDA南瓜交易数据(1757 行 × 26 列的真实脏数据)。前者教流程,后者教清洗——这正是数据工作的两半。

2.4 真实数据从来不会"开箱即用"

diabetes 是教学特供:标准化好、零缺失、零异常。南瓜数据不这样:空值、字符串与数字混杂、Package列里装着 “sacks”、“bins”、“1 1/9 bushel cartons” 等各种计量方式。

向数据问对问题是第一步。对南瓜数据,回归能回答的问题是:"预测某个月份南瓜的价格。"拿到问题再回头看数据,才知道留什么、扔什么。清洗四步:

第 1 步:统一计量口径——只留 bushel(蒲式耳)。口径不一的价格没法比较:

pumpkins=pumpkins[pumpkins['Package'].str.contains('bushel',case=True,regex=True)]

实测:1757 行 →415 行。数据量小了,但每行都可比——脏数据再多也是噪声,干净数据再少也是信号。

第 2 步:只留需要的列(Package / Low Price / High Price / Date)。

第 3 步:构造目标与特征——高低价取均值为当日价格,从日期提取月份:

price=(pumpkins['Low Price']+pumpkins['High Price'])/2month=pd.DatetimeIndex(pumpkins['Date']).month

第 4 步:按蒲式耳归一化。“1 1/9 bushel”(大箱)和 “1/2 bushel”(小篮)标价不可比,统一折算成每蒲式耳价格。蒲式耳是体积单位,半蒲式耳的小南瓜反而贵——小个头每蒲式耳装更多个。不折腾单位换算,统一按蒲式耳计价,这就是理解数据业务含义的意义。

一个 pandas 3.0 的新坑:pd.to_datetime()解析 Date 列会报Could not infer format警告——3.0 明确要求显式指定格式。稳妥写法:

pd.to_datetime(pumpkins['Date'],format='mixed')# 或给具体格式 '%m/%d/%Y'

2.5 可视化:建模前的侦察

数据科学家的基本功是用图说话。散点图(price vs month)只能看到"某月有一堆点";分组柱状图(每月均价)立刻看出价格高峰在9-10 月。

seaborn 热力图一次看清所有数值列两两相关系数:

corr=new_pumpkins[['Month','Low Price','High Price','Price']].corr()sns.heatmap(corr,annot=True,cmap="coolwarm",fmt=".2f")

实测相关矩阵里有个重要现象:Month 与 Price 相关只有 -0.149(弱相关),但柱状图明明显示 9-10 月有价格高峰。不矛盾——相关系数只度量直线关系,季节高峰是非线性模式(中间高两头低),直线测不出山峰。建模前最重要的侦察结论:相关系数低 ≠ 没关系,图和数要一起看。

案例实战

实测环境:conda envml-course(scikit-learn 1.9.1 / pandas 3.0.6)
完整脚本:stage2/assets/stage2_demos.py

实战 1:diabetes——五步跑通第一个模型

目标:加载数据 → 选特征 → 划分 → 训练 → 画图,全流程一次走通。

importnumpyasnpfromsklearnimportdatasets,model_selection,linear_model X,y=datasets.load_diabetes(return_X_y=True)# (442, 10)X=X[:,2].reshape((-1,1))# 只用 BMI(第 3 列)X_train,X_test,y_train,y_test=model_selection.train_test_split(X,y,test_size=0.33,random_state=42)model=linear_model.LinearRegression().fit(X_train,y_train)

真实输出:

X.shape = (442, 10) # 数据已标准化,所以都是小数 coef_ = 972.8763 intercept_ = 150.2627 R² (test) = 0.3164
  • coef_ = 972.88:BMI 每升 1 个标准差,病情进展指标平均升约 973 个单位——方向符合医学常识;
  • R² = 0.3164:单特征只能解释 31.6% 的变异。不是模型失败,是单特征的诚实上限——下一课加多特征。
    -

这条蓝线就是模型本身:给定新 BMI,在线上读出 y 就是预测。线性回归 = 最小二乘法找出的总误差最小的那条直线。

实战 2:南瓜——清洗出建模可用的数据

原始数据体检:

原始行数 = 1757 缺失统计(前几列): Type 缺 1712, Sub Variety 缺 1461, Grade 缺 1757

缺失严重但集中在与"月份-价格"无关的列——整列弃用。清洗流水线输出:

bushel 过滤后行数 = 415 月均价格(美元/蒲式耳): 8 24.37 9 28.54 10 28.36 11 25.07 12 15.41

南瓜交易集中在 8-12 月(收获季),9-10 月最贵(约 28.5,万圣节需求旺),12 月腰斩(15.41)——节日过了价格跳水。这就是柱状图里季节模式的数字版。

教学数据 vs 真实数据(本课两份实测数据的对照):

diabetes(教学)南瓜(真实)
缺失值零Type 缺 97%,Grade 全缺
特征类型已标准化的数值字符串+数值混杂
量纲统一蒲式耳口径不一,需归一化
清洗代码行数0 行4 步流水线
教学角色教流程教清洗与侦察

小结

  1. 环境一次配好(conda + 清华镜像);scikit-learn API 全同构:fit/predict/score三件套贯穿全课程。
  2. 回归预测数值、分类预测类别;diabetes 教流程、南瓜教清洗——数据工作的两半。
  3. 清洗四步:筛 bushel(1757→415)→ 选列 → 均价+月份 → 按蒲式耳归一化;pandas 3.0 日期解析要显式 format。
  4. 可视化是建模前的侦察:Month-Price 相关仅 -0.149 但 9-10 月有明显高峰——相关系数只测直线,图和数要一起看。
  5. 实测:BMI 单特征 R² 0.3164(单特征诚实上限);南瓜月均 9-10 月 28.5 / 12 月 15.41。
  6. 数据备好了,建模:参见第 3 课《线性回归与多项式回归(南瓜)》。

扩展阅读

  • 原课第 2-3 课(Tools + Data):https://github.com/microsoft/ML-For-Beginners/tree/main/2-Regression
  • Scikit-learn 线性回归官方案例:https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html
  • diabetes 数据集官方说明:https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset
  • USDA 特种作物市场报告(南瓜数据来源):https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice
  • Seaborn 官方教程:https://seaborn.pydata.org/tutorial.html

系列导航

  • 上一篇:第 01 课《导论——是什么、简史、负责任 AI 与标准流程》
  • 下一篇:第 03 课《线性回归与多项式回归(南瓜)》

更多专栏:

蛋白 / 抗体 / 多肽 / 核酸分子模拟 / 动力学 / 对接药物 / 设计 / 案例AI / Agent / 大模型
开源蛋白结构预测分子模拟基础小分子药物设计案例AI Agent系列
开源蛋白生成方法实践分子动力学模拟-Amber蛋白药物设计案例化学大模型
开源多肽设计模型分子动力学模拟-Gromacs多肽药物设计案例《AI Agent原理与实战》
开源多肽性质预测分子动力学模拟-OpenMM开源小分子生成设计CADD中的机器学习模型
DNA/RNA药物设计結合自由能高效计算配置《MCP 入门实战》
siRNA药物设计模型UCSF DOCK系列我胡师兄说药《AI入门实战2026》
ASO药物设计模型rDock系列 LeDock系列 gnina系列《经典机器学习实战》
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 2:10:28

【零基础学AI】第 23 章课后练习与答案

第 23 章练习与答案 先完成题目,再看答案。代码从章节目录运行,使用已安装本章依赖的 Python。 🌈 关于《AI 零基础 36 讲》课后训练 📚 与正式讲解配套学习 本篇是《AI 零基础 36 讲》的配套课后训练,与对应章节的正…

作者头像 李华
网站建设 2026/11/4 2:07:38

6. 机器学习与特征

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/4 2:07:21

PS4 模拟器 PC 实战:15 分钟跑起血源诅咒

PS4 模拟器 PC 实战:15 分钟跑起血源诅咒 【免费下载链接】shadPS4 PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C 项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4 《血源诅咒》在 PC 上 60 帧这件事,…

作者头像 李华
网站建设 2026/11/4 2:06:49

如何完整解析 iOS 应用结构与动态库加载链路

如何完整解析 iOS 应用结构与动态库加载链路 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea 交付物常常只有一个 IPA(Apple 应用分发封…

作者头像 李华
网站建设 2026/11/4 2:04:05

Capture CIS配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/4 2:04:04

蔡司扫描电子显微镜多少钱一台?不谈配置只问价格全是白费

采购蔡司扫描电子显微镜,90%的人都会踩同一个坑:上来就问友硕小编“一台蔡司SEM到底多少钱”。市面上报价五花八门、层级混乱,很多非正规渠道混淆“普通台式电镜”与蔡司正统SEM机型,误导采购选型。不少采购、研发负责人被杂乱信息…

作者头像 李华