SL Scikit-Learn Learn机器学习教程

Lesson 01

机器学习基础:概念、任务与工具准备

本章先建立机器学习的整体认知:它和传统编程有什么不同、常见任务有哪些、样本与特征等基本术语怎么理解,最后把 scikit-learn 及配套库的环境准备好。

  • 预计时长45 分钟
  • 难度入门
  • 前置章节无,从这里开始

本章细分学习地图

入门阶段最重要的不是背 API,而是建立“任务—数据—模型—评估”的整体框架,并统一术语。

模块拆细学习单元完成后应产出掌握标准
什么是机器学习从数据中学习规律,而非手写规则。一句话定义与一个生活化例子。能说清它和 if-else 规则的本质区别。
基本概念样本、特征、标签、特征矩阵 X、目标 y、参数、超参数。术语对照表。看到一份数据能指出哪是特征、哪是标签。
任务类型监督(分类/回归)、无监督(聚类/降维)。任务判别清单。拿到需求能判断属于哪类任务。
统一 APIfit/predict/transform 三段式接口。首个可运行模型脚本。能独立完成实例化、拟合、预测流程。
环境与工具虚拟环境、核心库安装与作用。.venv/requirements.txt终端与 Notebook 使用同一 Python。

学习目标

机器学习工作流

1数据 X, y
2训练 fit
3预测 predict
4评估 score

本章完成度

已完成 0/4

本章核心判断

机器学习不是让程序“更聪明”,而是把“人来总结规则”换成“从数据中自动学习规则”。判断一个问题是否适合机器学习,先问:有没有可用的历史数据,且规则复杂到难以手写?

什么是机器学习

传统编程是人写好规则,程序按规则处理输入得到输出;机器学习则是给定大量“输入 + 期望输出”,让算法自动学出一套规则(模型),再用它对新数据做预测。

传统编程

人工总结规则 → 写成代码 → 处理数据。规则由人维护,数据变化时需手动改规则。

机器学习

准备带标签数据 → 算法拟合出模型 → 模型预测新样本。规则由数据驱动,可随数据更新重新训练。

什么时候用机器学习

当规则太多、太复杂或会随时间变化(如垃圾邮件识别、图片分类、需求预测),且有可用历史数据时,机器学习通常比手写规则更划算。

基本概念与术语

后续所有章节都会用到这套术语,务必先统一理解。

术语含义示例
样本 sample数据集中的一行,一次观测。一封邮件、一朵鸢尾花。
特征 feature描述样本的一个可量化属性。花瓣长度、邮件词频。
标签 label / 目标 target希望模型预测的答案。是否垃圾邮件、花的种类。
特征矩阵 X二维数组,形状 (n_samples, n_features)150 行 4 列的鸢尾花数据。
目标向量 y一维数组,长度为样本数。150 个类别标签。
参数 parameter模型训练时从数据中学到的量。线性模型的系数 coef_
超参数 hyperparameter训练前人为设定、不由数据直接学出。KNN 的 n_neighbors
训练集 / 测试集分别用于拟合与最终评估的数据。train_test_split 划分。
参数 vs 超参数

一句话区分:参数是模型“学出来的”,超参数是你“调出来的”。调参本质上就是搜索一组更好的超参数。

常见任务类型

分类(监督)

预测离散类别,如垃圾邮件 / 正常邮件。评估看准确率、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 示例。