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) |
| 分类 | XGBoost | XGBClassifier(n_estimators=100).fit(X, y) |
| 分类 | 支持向量机 | SVC(kernel='rbf').fit(X, y) |
| 聚类 | K-Means | KMeans(n_clusters=5).fit(X) |
| 降维 | PCA | PCA(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 过拟合和欠拟合 →
注释
-
Kaggle, “State of Data Science”, 2023 ↩