news 2026/9/11 7:40:07

ML-For-Beginners 入门指南:用 Python 与 Scikit-learn 搭建你的第一个线性回归模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ML-For-Beginners 入门指南:用 Python 与 Scikit-learn 搭建你的第一个线性回归模型

ML-For-Beginners 入门指南:用 Python 与 Scikit-learn 搭建你的第一个线性回归模型

【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners

本篇技术指南是 ML-For-Beginners 课程「回归(Regression)」章节的第 1 课,核心主题是搭建本地机器学习开发环境(Python + Visual Studio Code + Scikit-learn + Jupyter Notebook),并基于 Scikit-learn 内置的糖尿病数据集(diabetes dataset)完成你的第一个线性回归模型:从导入依赖库、探索数据,到拆分训练/测试集、训练模型、预测与可视化。学完本节,你将具备用 Notebook 完成一次完整"传统机器学习"建模流程的实战能力,并为后续线性/逻辑回归课程(2-Regression/2-Data、2-Regression/3-Linear、2-Regression/4-Logistic)打好工具基础。

本课配套的速写笔记(Sketchnote)见 sketchnotes/ml-regression.png,此外本课还提供了完整的 R 语言版本实现(Tidymodels 框架),见 2-Regression/1-Tools/solution/R/lesson_1.html。

一、学习目标

在开始搭建任何模型之前,先确保工具链就绪。本课你将掌握四件事:

  • 配置本地计算机,使其可以胜任机器学习任务;
  • 熟练使用 Jupyter Notebook 进行交互式编码;
  • 安装并使用 Scikit-learn(包括其核心 API 与内置数据集);
  • 通过一次完整的动手练习,理解线性回归的基本工作流。

从本课起,课程会连续用四节课讲解回归模型:本课是"工具篇"(Tools of the trade),随后是数据管理、线性与多项式回归、逻辑回归。

二、环境安装与配置

机器学习实践对 Python 环境版本敏感,因此课程的推荐路径是:安装 Python 3 → 使用虚拟环境 → 安装 VS Code → 安装 Scikit-learn → 安装 Jupyter。

1. 安装 Python 并启用虚拟环境

大多数操作系统已预装 Python,但仍建议从官方渠道安装最新稳定版。由于不同项目可能依赖不同 Python 版本(某些依赖库只支持特定版本),课程明确建议在**虚拟环境(virtual environment)**中工作,Python 3 自带的venv模块即可完成:

python3 -m venv .venv source .venv/bin/activate # Linux / macOS # Windows: .venv\Scripts\activate

虚拟环境能够将项目依赖与系统级 Python 隔离,避免版本冲突——这也是本仓库所有 Notebook 练习的推荐运行方式。

2. 安装 Visual Studio Code

本课程使用 VS Code 作为主力编辑器。安装基础版本后,需要为其配置 Python 开发能力(安装 Python 扩展即可获得解释器选择、代码补全、调试与 Notebook 支持)。VS Code 官方还提供了"Python Coding Packs",可一次性完成 Python 与 VS Code 的捆绑配置,适合初学者。

3. 安装 Scikit-learn

Scikit-learn 是课程的核心机器学习库。官方推荐在 Python 3 虚拟环境中安装:

pip install scikit-learn

需要注意:若在 Apple M1 Mac 上安装,应优先参考官方安装页的特殊说明(通常建议使用 conda 或预编译 wheel 以避免编译问题)。

4. 安装 Jupyter Notebook

Notebook 是数据科学家的"工作台",需要通过 Jupyter 包获得:

pip install jupyter

三、认识你的 ML 开发环境:Notebook

你将以Notebook为载体开发 Python 代码、构建模型。这类文件以.ipynb结尾,是数据科学领域的通用工具:它提供交互式环境,让你在编写代码的同时,把说明文字、公式、图表和运行结果穿插在一起——这对实验性、研究导向的项目尤其友好。

本课的练习文件位于 2-Regression/1-Tools/notebook.ipynb(仓库中还提供了含完整运行结果的参考实现 2-Regression/1-Tools/solution/notebook.ipynb)。

练习:上手操作一个 Notebook

  1. 在 VS Code 中打开notebook.ipynb,系统会自动启动一个 Python 3+ 的 Jupyter 内核。Notebook 由一个个可独立"运行"的单元格(cell)组成,点击单元格左侧的播放按钮(▶)即可执行当前代码块。

  2. 新建一个 Markdown 单元格(选择md标识),输入标题文本# Welcome to your notebook,同时熟悉在代码旁写文档的"自文档化"工作方式。

  3. 新建一个代码单元格,输入:

    print('hello notebook')
  4. 点击运行箭头执行该单元格,你将看到输出:

    hello notebook

思考题:网页开发者的工作环境与数据科学家的环境有何不同?前者强调构建-部署循环,后者强调交互式探索与实验记录——Notebook 正是为后者设计的。

四、Scikit-learn 快速认知

Scikit-learn(读作sciscience)是一个开源机器学习库,同时支持监督学习非监督学习,并提供模型拟合、数据预处理、模型选择与评估等各类工具。它的 API 设计统一:fit()训练、predict()预测、train_test_split()拆分数据,降低了学习成本。

本课程刻意选择"传统机器学习"路线(回归、分类、聚类、NLP、时间序列等),不涉及神经网络与深度学习——后者由微软的 AI for Beginners 系列课程专门覆盖。Scikit-learn 主要面向数值型数据,且内置多个玩具数据集(如本课使用的 diabetes)和预构建模型,非常适合作为教学工具。

五、动手练习:你的第一个 Scikit-learn 线性回归模型

本节练习参考了 Scikit-learn 官方的 OLS 线性回归示例,核心代码与完整运行输出可对照 2-Regression/1-Tools/solution/notebook.ipynb 查看。开始前,请先将notebook.ipynb中的旧单元格清空(点击垃圾桶图标)。

1. 业务场景与回归方法选型

想象你是一名医学研究者,想测试某种糖尿病治疗方案:机器学习模型能基于多个变量组合,预测哪些患者对治疗响应更好。即便是一个最基础的回归模型,一旦可视化,也能展示变量间的关系,帮你组织理论上的临床试验。

这里有一个方法选型的关键认知:预测数值用线性回归,预测类别用逻辑回归。例如"预测某年龄人群的身高"是数值问题(线性回归),而"判断某菜系是否属于素食"是类别问题(逻辑回归)。后续课程会深入逻辑回归。

2. 导入依赖库

import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model, model_selection
  • matplotlib:绘图工具,用于生成散点图与拟合直线;
  • numpy:Python 数值计算核心库;
  • sklearn:Scikit-learn,其中datasets提供内置数据,linear_model提供线性回归模型,model_selection负责把数据拆分为训练集与测试集。

3. 加载糖尿病数据集

内置的 diabetes 数据集 包含442 个样本、10 个特征变量,常见特征包括:

  • age:年龄(岁)
  • bmi:身体质量指数
  • bp:平均血压
  • s1 tc:T 细胞(一种白细胞)相关指标

(完整 10 个特征在 R 版课程中列示更全:除上述外还有sexs2 ldls3 hdls4 tchs5 ltgs6 glu六项血清测量值,目标变量y是基线一年后疾病进展的定量度量。)

X, y = datasets.load_diabetes(return_X_y=True) print(X.shape) print(X[0])

return_X_y=True让返回值按元组拆分:X为数据矩阵,y为回归目标(监督学习必须要有明确的y)。运行输出:

(442, 10) [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 -0.04340085 -0.00259226 0.01990842 -0.01764613]

说明数据是 442 行、每行 10 个元素的数组(特征已标准化)。思考题:线性回归预测的是特征X与目标y之间的关系,你能在官方文档中找到该数据集的 target 定义吗?另外该数据集包含sex这类二分类特征,不妨想一想:类似的分类方式是否会因人群划分而影响治疗方案覆盖的公平性(这也是本课程后续「公平性」章节会讨论的问题)。

4. 选择单一特征并重构为 2D 数组

本练习只使用第三列(索引 2,即bmi)进行一元线性回归:

X = X[:, 2] X = X.reshape((-1, 1))
  • X[:, 2]:选取所有行,2选取第 3 列;
  • reshape((-1, 1)):将一维数组重构为 (442, 1) 的二维列向量——-1表示该维度由 NumPy 自动推算,这是 Matplotlib 绘图与 Scikit-learn 输入所要求的格式。

5. 拆分训练集与测试集

机器学习需要"留一手"验证:用一部分数据训练,另一部分从未见过的数据评估模型。Scikit-learn 一行搞定:

X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)

test_size=0.33表示把 33% 的数据留作测试集,其余 67% 用于训练(与 R 版课程中initial_split(prop = 0.67)的比例一致)。

6. 训练线性回归模型

model = linear_model.LinearRegression() model.fit(X_train, y_train)

model.fit()是 Scikit-learn 乃至 TensorFlow 等绝大多数 ML 库的统一训练接口。LinearRegression()采用最小二乘法,学习一条"最佳拟合线",使预测值与真实值之间的总体误差最小(在 R/Tidymodels 版本中,这一过程等价于linear_reg() %>% set_engine("lm") %>% set_mode("regression")后调用fit(y ~ ., data = diabetes_train),见 2-Regression/1-Tools/solution/R/lesson_1.Rmd)。

7. 在测试集上预测

y_pred = model.predict(X_test)

predict()用训练好的模型对测试数据生成预测值,稍后将用于在数据分组之间绘制拟合直线。

8. 可视化:散点图 + 拟合线

plt.scatter(X_test, y_test, color='black') plt.plot(X_test, y_pred, color='blue', linewidth=3) plt.xlabel('Scaled BMIs') plt.ylabel('Disease Progression') plt.title('A Graph Plot Showing Diabetes Progression Against BMI') plt.show()

图中黑色小点为真实样本,蓝色粗线为模型学到的线性关系。思考:这条直线究竟"做了什么"?它表达了bmi与疾病进展之间的平均趋势——给定一个新的、未知的 BMI 值,你可以在直线上找到它对应的 y 轴位置,这就是预测。恭喜,你已经完成了第一个线性回归模型的构建、预测与可视化!

六、课程配套挑战与作业

  • 🚀 挑战:把X = X[:, 2]中的索引 2 换成数据集的其他列(如agebp),重新训练并绘图。结合该数据集 target 的定义(一年后疾病进展),你能从不同特征与疾病进展的关系中学到什么?
  • 📝 作业:阅读 Scikit-learn 的 Linnerud 数据集。

七、回顾与自学建议

本课做的是简单线性回归(一个特征解释一个目标)。建议进一步了解它与此后课程中的一元/多元线性回归的差异——当引入多个特征时,模型如何从"一条线"变为"一个超平面"。同时可深入理解回归的一般概念:它能回答哪些问题(长度、温度、年龄等连续数值的预测),以及何时应该改选逻辑回归(类别预测)。

本节后续课程将围绕"南瓜价格"这一真实数据集展开完整的数据管理与建模实战,请确保本课环境与基本功已就绪。

【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 7:38:22

MCU级关键词唤醒模型源码深度解析与工程落地

1. 项目概述:为什么一个轻量级关键词唤醒模型的源码审计,值得花三天时间逐行抠细节? ARM架构正在从服务器、桌面悄然下沉到每一颗微控制器里——不是靠堆算力,而是靠把AI推理能力塞进512KB Flash、64KB RAM的MCU里。我去年在做一款…

作者头像 李华
网站建设 2026/9/11 7:37:46

GPT-6 Astra 3D能力实测:29个可复现案例与开源站点全复盘

在AI生成内容越来越卷的背景下,真正能落地的3D应用反而成了稀缺品。我花了一周时间把GPT-6 Astra在3D方向的29个实际案例全部跑了一遍,并且把这些案例整理成了一个开源站。这篇文章就是我对“GPT-6 Astra 做 3D 到哪一步了”这个问题的完整回答&#xff…

作者头像 李华
网站建设 2026/9/11 7:36:20

移动优先索引时代,SEO网络公司如何系统做好移动端优化

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

作者头像 李华
网站建设 2026/9/11 7:30:32

LangChain高并发智能客服的流控、排队与降级协同治理

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

作者头像 李华