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
在 VS Code 中打开
notebook.ipynb,系统会自动启动一个 Python 3+ 的 Jupyter 内核。Notebook 由一个个可独立"运行"的单元格(cell)组成,点击单元格左侧的播放按钮(▶)即可执行当前代码块。新建一个 Markdown 单元格(选择
md标识),输入标题文本# Welcome to your notebook,同时熟悉在代码旁写文档的"自文档化"工作方式。新建一个代码单元格,输入:
print('hello notebook')点击运行箭头执行该单元格,你将看到输出:
hello notebook
思考题:网页开发者的工作环境与数据科学家的环境有何不同?前者强调构建-部署循环,后者强调交互式探索与实验记录——Notebook 正是为后者设计的。
四、Scikit-learn 快速认知
Scikit-learn(读作sci如science)是一个开源机器学习库,同时支持监督学习与非监督学习,并提供模型拟合、数据预处理、模型选择与评估等各类工具。它的 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 版课程中列示更全:除上述外还有sex、s2 ldl、s3 hdl、s4 tch、s5 ltg、s6 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 换成数据集的其他列(如age、bp),重新训练并绘图。结合该数据集 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),仅供参考