Ch04 机器学习修订于 二〇二六年十月九日

4.3 五个必知算法

4.3.1 线性回归

最简单的模型:画一条直线穿过数据点。y = wx + b。w 是斜率,b 是截距。

Scikit-learn(Python 最主流的传统机器学习库,封装了几十种经典算法,几行代码就能训练一个模型——深度学习时代它仍然是表格数据、快速实验的首选工具)一行代码:

from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(X, y)

虽然简单,但可解释性最强——你知道每个特征对结果的贡献是多少(w 的值)。在金融、医疗等需要解释的场景,线性回归仍然广泛使用。

4.3.2 逻辑回归

名字叫”回归”,其实是分类。输出是一个 0-1 之间的概率:这封邮件是垃圾邮件的概率是 0.8。

核心操作:在线性回归的输出上套一个 Sigmoid 函数(一条 S 形曲线,把任何实数平滑地”挤压”到 0-1 之间——负数靠近 0,正数靠近 1,正好天然适合表达”概率”。你在 Ch06 会看到它也是神经网络里最早的激活函数之一),把 (-∞, +∞) 的实数压到 (0, 1) 的概率。

神经网络最后一层用的 Softmax,就是逻辑回归的多类别版本。

4.3.3 决策树和随机森林

决策树:一系列”如果-那么”规则。如果年龄<30,如果收入>5000,那么… 像流程图一样,完全可解释。

随机森林:种 100 棵决策树,每棵树在数据的不同子集上训练,最后投票决定答案。单个树可能过拟合(死记硬背),100 棵树投票就稳多了。

4.3.4 XGBoost

梯度提升树。Kaggle(全球最大的数据科学竞赛平台,企业和机构在上面发布真实数据和奖金,吸引了全世界最优秀的 ML 工程师来比拼——能在 Kaggle 上夺冠的算法,基本就是该领域的最强方案)竞赛的王者——表格数据上,XGBoost 至今(2026 年)仍然经常打败深度学习 1。

原理:一棵树接一棵树地种。每棵新树专注纠正前面所有树的错误。比如第一棵树预测了 3.0(实际是 5.0),第二棵树就专注学习”怎么修正这个 2.0 的误差”。

4.3.5 K-Means 聚类

无监督学习的代表。你告诉它”分成 K 类”,它自己找 K 个中心点,把离每个中心点最近的数据归为一类。

常用于:用户分群(高价值用户/普通用户/流失用户)、图片压缩(用 K 个颜色代替几万个颜色)、文档聚类(自动把相似文章归在一起)。

4.3.6 KNN(K 近邻)

最”懒”的算法——它甚至不训练。当你要预测一个新数据点时,KNN 做的事就是:找到离它最近的 K 个已知数据点,看它们多数属于哪一类,新数据就归哪一类。

比如你要判断一个新用户是”高价值”还是”普通用户”。KNN 在数据库里找到跟他最像的 5 个用户(K=5),其中 3 个是高价值,2 个是普通用户——结论:高价值。

K 怎么选?K 太小(比如 K=1),单个邻居的噪声就会影响结果——太敏感。K 太大,会把距离远的、不太像的数据也纳入投票——太迟钝。通常 K 取奇数值(3、5、7、9),用交叉验证来调。

KNN 的优势:原理极其简单,不需要训练(直接查)。缺点:每预测一次都要跟所有训练数据算距离,数据量大时非常慢。不适用于高维数据(特征太多时”最近”失去了意义——高维空间里所有点都差不多远)。

KNN 在数据极少时仍然有效——CNN 的选型指南里提到,几十到几百张图片的场景,KNN 配合 Embedding 比深度学习更实用。

4.3.7 scikit-learn常用API速查

下面是一个 5 行代码模板,覆盖了 80% 的传统 ML 任务:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 1. 加载数据 → 2. 划分训练/测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 3. 选模型 → 4. 训练
model = RandomForestClassifier(n_estimators=100).fit(X_train, y_train)

# 5. 评估
print(accuracy_score(y_test, model.predict(X_test)))

常用模型一行速查(全部用 .fit(X_train, y_train).predict(X_test) 模式):

任务模型一行代码
回归线性回归LinearRegression().fit(X, y)
回归岭回归(带正则化)Ridge(alpha=1.0).fit(X, y)
分类逻辑回归LogisticRegression().fit(X, y)
分类随机森林RandomForestClassifier(n_estimators=100).fit(X, y)
分类XGBoostXGBClassifier(n_estimators=100).fit(X, y)
分类支持向量机SVC(kernel='rbf').fit(X, y)
聚类K-MeansKMeans(n_clusters=5).fit(X)
降维PCAPCA(n_components=2).fit_transform(X)
交叉验证5折交叉验证cross_val_score(model, X, y, cv=5)
网格搜索自动调参GridSearchCV(model, param_grid, cv=5).fit(X, y)

关键提示:树模型(随机森林、XGBoost)不需要特征缩放(归一化/标准化),但线性模型(线性回归、逻辑回归、SVM)必须做——StandardScaler().fit_transform(X) 先跑一遍。这是新手最容易踩的坑。


← 上一节:4.1 三大类学习 | 下一节:4.5 过拟合和欠拟合 →

注释

  1. Kaggle, “State of Data Science”, 2023 ↩

关联9

知识图谱

局部图谱 · 点节点跳转