Lesson 01
机器学习基础:概念、任务与工具准备
本章先建立机器学习的整体认知:它和传统编程有什么不同、常见任务有哪些、样本与特征等基本术语怎么理解,最后把 scikit-learn 及配套库的环境准备好。
本章细分学习地图
入门阶段最重要的不是背 API,而是建立“任务—数据—模型—评估”的整体框架,并统一术语。
| 模块 | 拆细学习单元 | 完成后应产出 | 掌握标准 |
|---|---|---|---|
| 什么是机器学习 | 从数据中学习规律,而非手写规则。 | 一句话定义与一个生活化例子。 | 能说清它和 if-else 规则的本质区别。 |
| 基本概念 | 样本、特征、标签、特征矩阵 X、目标 y、参数、超参数。 | 术语对照表。 | 看到一份数据能指出哪是特征、哪是标签。 |
| 任务类型 | 监督(分类/回归)、无监督(聚类/降维)。 | 任务判别清单。 | 拿到需求能判断属于哪类任务。 |
| 统一 API | fit/predict/transform 三段式接口。 | 首个可运行模型脚本。 | 能独立完成实例化、拟合、预测流程。 |
| 环境与工具 | 虚拟环境、核心库安装与作用。 | .venv/ 与 requirements.txt。 | 终端与 Notebook 使用同一 Python。 |
学习目标
机器学习工作流
本章完成度
已完成 0/4
机器学习不是让程序“更聪明”,而是把“人来总结规则”换成“从数据中自动学习规则”。判断一个问题是否适合机器学习,先问:有没有可用的历史数据,且规则复杂到难以手写?
什么是机器学习
传统编程是人写好规则,程序按规则处理输入得到输出;机器学习则是给定大量“输入 + 期望输出”,让算法自动学出一套规则(模型),再用它对新数据做预测。
传统编程
人工总结规则 → 写成代码 → 处理数据。规则由人维护,数据变化时需手动改规则。
机器学习
准备带标签数据 → 算法拟合出模型 → 模型预测新样本。规则由数据驱动,可随数据更新重新训练。
当规则太多、太复杂或会随时间变化(如垃圾邮件识别、图片分类、需求预测),且有可用历史数据时,机器学习通常比手写规则更划算。
基本概念与术语
后续所有章节都会用到这套术语,务必先统一理解。
| 术语 | 含义 | 示例 |
|---|---|---|
| 样本 sample | 数据集中的一行,一次观测。 | 一封邮件、一朵鸢尾花。 |
| 特征 feature | 描述样本的一个可量化属性。 | 花瓣长度、邮件词频。 |
| 标签 label / 目标 target | 希望模型预测的答案。 | 是否垃圾邮件、花的种类。 |
特征矩阵 X | 二维数组,形状 (n_samples, n_features)。 | 150 行 4 列的鸢尾花数据。 |
目标向量 y | 一维数组,长度为样本数。 | 150 个类别标签。 |
| 参数 parameter | 模型训练时从数据中学到的量。 | 线性模型的系数 coef_。 |
| 超参数 hyperparameter | 训练前人为设定、不由数据直接学出。 | KNN 的 n_neighbors。 |
| 训练集 / 测试集 | 分别用于拟合与最终评估的数据。 | train_test_split 划分。 |
一句话区分:参数是模型“学出来的”,超参数是你“调出来的”。调参本质上就是搜索一组更好的超参数。
常见任务类型
分类(监督)
预测离散类别,如垃圾邮件 / 正常邮件。评估看准确率、F1 等。
回归(监督)
预测连续数值,如房价、销量。评估看 MAE、RMSE 等。
聚类(无监督)
无标签下自动分群,如用户分群。评估看轮廓系数等。
降维(无监督)
压缩特征维度用于可视化或去噪,如 PCA。
| 问题描述 | 是否有标签 | 任务类型 |
|---|---|---|
| 判断交易是否欺诈 | 有(欺诈/正常) | 分类 |
| 预测下月用电量 | 有(连续数值) | 回归 |
| 把顾客分成若干群体 | 无 | 聚类 |
| 把 100 维特征压到 2 维可视化 | 无 | 降维 |
scikit-learn 的统一 API
scikit-learn 几乎所有模型都遵循同一套接口:估计器用 fit 学习,用 predict 预测,预处理器用 transform 变换。掌握这一模式,学新算法只需关注它的超参数。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 1. 准备数据:X 是特征矩阵,y 是标签
X, y = load_iris(return_X_y=True)
# 2. 划分训练集/测试集(分类任务用 stratify 保持类别比例)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 3. 实例化模型并设定超参数
model = KNeighborsClassifier(n_neighbors=5)
# 4. 训练与预测
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# 5. 评估
print("测试集准确率:", model.score(X_test, y_test))
单个样本预测要写成二维形状:model.predict([[5.1, 3.5, 1.4, 0.2]]),而不是传入一维列表。特征矩阵始终是 (n_samples, n_features)。
环境准备与核心库
建议每个项目使用独立虚拟环境,避免依赖版本互相污染。
python3 -m venv .venv
source .venv/bin/activate # Windows: .\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install scikit-learn pandas numpy matplotlib pillow nltk jupyter
pip freeze > requirements.txt
| 库 | 作用 | 典型用途 |
|---|---|---|
| scikit-learn | 机器学习算法与工具 | 模型训练、评估、Pipeline。 |
| pandas | 表格数据处理 | 读取 CSV、清洗、特征构造。 |
| numpy | 数值与数组计算 | 矩阵运算、特征矩阵表示。 |
| matplotlib | 可视化 | 画分布、决策边界、学习曲线。 |
| pillow | 图像读写 | 图像特征提取的前处理。 |
| nltk | 自然语言处理 | 文本分词、停用词、词干。 |
运行 python -c "import sklearn; print(sklearn.__version__)" 确认当前环境可用;Notebook 里记得选择该虚拟环境对应的内核。
练习题
第 1 题:给定「根据房屋面积、房间数预测房价」,这属于哪种任务?为什么?
参考思路:预测目标房价是连续数值且有历史标签,属于监督学习中的回归任务,评估常用 MAE / RMSE。
第 2 题:KNN 的 n_neighbors 是参数还是超参数?它由谁决定?
参考思路:n_neighbors 是超参数,训练前由人设定,不由数据直接学出;可通过交叉验证或网格搜索来选择更优取值。
检查点
离开本章前,请确认:
- 能用一句话解释机器学习,并举出一个适合用它的场景。
- 能区分分类、回归、聚类、降维四类任务。
- 能指出一份数据里哪些是特征、哪个是标签,并区分参数与超参数。
- 本地环境已装好核心库,且能跑通鸢尾花 KNN 示例。