4. 经典决策模型:线性回归、逻辑回归、决策树、随机森林、支持向量机

说实话,做智能决策模型这些年,我见过太多人一上来就堆深度学习。其实呢,经典模型才是真正的基石。你想想看,很多业务场景下,线性回归和决策树就能解决问题,何必非得上个 Transformer?

我个人习惯是,拿到一个分类或回归任务,先拿这几个经典模型跑一遍。不是为了偷懒,而是为了摸清数据的脾气。今天我就把这五个模型的实战心得,掰开了揉碎了讲给你听。

4.1 线性回归:最朴素的预测器

线性回归,说白了就是找一条直线(或超平面)来拟合数据。它的数学形式很简单:y = wx + b。但简单不代表没用。

核心要点:线性回归假设特征与目标之间存在线性关系。如果数据本身是线性的,它就是最优解。

我在项目中遇到过一个问题:预测电商平台的日销售额。一开始用线性回归,效果还行。但后来发现销售额在促销日会暴涨,线性模型完全抓不住这个规律。嗯,这时候就需要做特征工程了——把“是否促销日”作为一个哑变量加进去。

# 线性回归的简单实现
from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

# 评估
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)
print(f'MSE: {mse:.2f}')
避坑指南:我曾经犯过一个低级错误——直接用原始特征做线性回归,没做归一化。结果模型收敛极慢,系数解释性也差。记住:线性回归对特征尺度敏感,一定要先标准化。

4.2 逻辑回归:分类界的瑞士军刀

别看它叫“回归”,其实是个分类模型。逻辑回归的核心是 Sigmoid 函数,把线性输出压缩到 0 到 1 之间,变成概率。

为什么说它是瑞士军刀?因为它简单、可解释、训练快。我经常用它做基线模型。你想想看,如果逻辑回归都跑不出好效果,那其他模型大概率也够呛。

# 逻辑回归示例
from sklearn.linear_model import LogisticRegression

clf = LogisticRegression()
clf.fit(X_train, y_train)
y_prob = clf.predict_proba(X_test)[:, 1]  # 获取正类概率
个人经验:逻辑回归的系数可以直接解释为特征的重要性。比如在信贷风控中,我可以直接告诉业务方:“收入这个特征的系数是 0.8,说明收入每增加一个单位,违约概率下降多少多少。”这种可解释性,深度学习给不了。

4.3 决策树:人类直觉的数学化

决策树,说白了就是一堆 if-else 的嵌套。它的好处是直观——你画出来的树,业务人员也能看懂。

我记得有一次做用户流失预测,业务方要求模型必须可解释。我直接上了决策树,把树画出来给他们看:“你看,如果用户最近 30 天登录次数小于 5 次,且消费金额低于 100 元,那么流失概率高达 80%。”他们当场就信了。

# 决策树示例
from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(max_depth=3)  # 限制深度防止过拟合
tree.fit(X_train, y_train)
注意:决策树非常容易过拟合。我曾经不加限制地训练一棵树,深度到了 20 层,训练集准确率 99%,测试集直接崩到 60%。所以一定要用剪枝、限制深度、或者设置最小样本数。

4.4 随机森林:集体的智慧

随机森林就是很多棵决策树投票。每棵树都在不同的数据子集和特征子集上训练,最后取平均或投票。为什么效果好?因为“三个臭皮匠,顶个诸葛亮”。

我个人习惯是,当数据量中等(几千到几万条),特征维度不高时,随机森林是我的首选。它不需要太多调参,就能给出不错的结果。

# 随机森林示例
from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(n_estimators=100, max_depth=5)
rf.fit(X_train, y_train)
importance = rf.feature_importances_  # 特征重要性
实战技巧:随机森林的 feature_importances_ 属性可以直接告诉你哪些特征最重要。我在做特征筛选时,经常先用随机森林跑一遍,把重要性低于 0.01 的特征直接扔掉,模型效果反而更好。

4.5 支持向量机(SVM):寻找最优分界线

SVM 的核心思想是:在两类数据之间,找一条“最宽”的马路。马路越宽,分类效果越稳定。它特别擅长处理高维数据和小样本场景。

我曾在文本分类任务中用过 SVM。文本数据特征维度很高(几千到几万维),逻辑回归容易欠拟合,而 SVM 配合 RBF 核函数,效果出奇的好。

# SVM 示例
from sklearn.svm import SVC

svm = SVC(kernel='rbf', C=1.0, gamma='scale')
svm.fit(X_train, y_train)
避坑指南:SVM 对特征尺度极其敏感。我曾经忘了做标准化,结果 SVM 跑了半小时还没收敛。另外,核函数的选择也很关键——线性核适合高维稀疏数据,RBF 核适合非线性数据。

4.6 模型对比与选择策略

你可能会问:这么多模型,我到底该用哪个?我个人的选择逻辑是这样的:

场景 推荐模型 理由
数据量小(<1000条) SVM / 逻辑回归 不容易过拟合,泛化能力强
数据量中等(1000-10000条) 随机森林 鲁棒性好,不需要太多调参
需要可解释性 决策树 / 逻辑回归 系数或树结构可以直接解释
高维稀疏数据 线性 SVM / 逻辑回归 线性模型在高维空间表现稳定
非线性关系明显 随机森林 / RBF-SVM 能捕捉复杂模式
我的建议:别纠结哪个模型最好。先拿逻辑回归和随机森林跑一遍,看看效果。如果逻辑回归和随机森林差距不大,那就用逻辑回归——简单、快、可解释。如果随机森林明显更好,再考虑 SVM 或更复杂的模型。

4.7 知识体系总览

下面这张图,是我自己总结的经典决策模型知识体系。你可以把它当作一个快速索引:

经典决策模型知识体系 经典决策模型 线性回归 逻辑回归 决策树 随机森林 支持向量机 y = wx + b 连续值预测 需特征标准化 Sigmoid 函数 二分类概率 可解释性强 if-else 嵌套 直观可解释 易过拟合 多棵树投票 鲁棒性好 特征重要性 最大间隔 核函数技巧 高维小样本 选择策略 小样本 → SVM | 中等数据 → 随机森林 | 需解释 → 决策树/逻辑回归 高维稀疏 → 线性模型 | 非线性 → RBF-SVM 或随机森林 先跑逻辑回归和随机森林做基线,再决定是否上更复杂的模型

好了,这五个模型的核心要点就这些。你可能会觉得内容有点多,但别急——每个模型我都会在后面的章节里,用真实案例带你手把手调参。到时候你就知道,这些经典模型到底有多能打。

专注资料整理