回归分析这件事刚入门的人容易把它想得太简单觉得不就是画一条线去拟合一堆点嘛做过几个真实项目的人又会觉得它水太深同一个数据集换一种正则化方式结果能差出十万八千里。我这些年做过销量预测、用户价值打分、设备寿命估算、广告投放效果归因几乎每一次都绕不开线性回归这一大家子。标题里提到的线性回归、岭回归、套索回归看起来是三个模型实际上是一条主线上的三个关键节点理解了它们之间的取舍逻辑你基本就掌握了监督学习里最实用的一类工具。这篇文章我打算按真实项目里的思考顺序来写先讲清楚为什么线性回归是起点再讲它到底在什么情况下会翻车然后引出岭回归和套索回归各自解决什么问题接着把实操流程、参数选择、踩坑经验全部摊开讲。不管你是刚学完网课想找个完整案例练手还是已经在工作里用回归模型但总觉得结果不够稳这篇内容都能直接拿去参考。1. 从线性回归说起它到底在拟合什么1.1 线性回归的核心假设与数学直觉线性回归的本质是假设目标变量和特征之间存在一个线性组合关系。用最直白的话说每个特征对结果的贡献是固定的加在一起就是预测值。数学形式就是 y w1x1 w2x2 ... wnxn b其中 w 是每个特征的权重b 是截距。训练的过程就是找到一组 w 和 b让预测值和真实值之间的差距尽可能小。这个差距通常用均方误差来衡量也就是把所有样本的预测误差平方后求平均。为什么用平方而不是绝对值因为平方函数处处可导求最小值的时候可以直接令导数为零得到解析解计算上非常友好。这也是线性回归能成为入门第一课的原因之一——它有闭式解不需要迭代优化就能求出最优参数。但这里有个容易被忽略的前提线性回归的线性指的是对参数线性不是对特征线性。你完全可以把 x 平方、取对数、做交互项之后放进去模型依然叫线性回归。这一点在实际特征工程里非常关键很多人以为线性回归只能拟合直线其实它可以拟合曲线只是需要你手动构造非线性特征。另一个核心假设是误差项独立同分布且服从均值为零的正态分布。这个假设决定了后续很多统计推断的有效性比如系数的置信区间、显著性检验。如果你只是拿它做预测这个假设松一点问题不大但如果你要用系数去解释业务含义比如这个特征每增加一个单位销售额平均提升多少那就必须认真对待。1.2 最小二乘法的求解过程与几何意义最小二乘法的目标函数是残差平方和写成矩阵形式就是 (y - Xw)^T(y - Xw)。对 w 求导并令其为零得到正规方程 X^T X w X^T y。如果 X^T X 可逆直接解出 w (X^T X)^(-1) X^T y。这就是线性回归的解析解一行公式搞定。几何上理解这件事会更直观我们把 y 看作 n 维空间里的一个向量X 的每一列是另一个向量线性回归做的事情就是把 y 投影到 X 的列空间上投影点就是预测值残差向量垂直于这个列空间。这个垂直就是正交性也是最小二乘的几何本质。实际计算中我们很少真的去求逆矩阵因为数值不稳定。常用的是 QR 分解或者奇异值分解来求解精度更高。如果你用 Python 的 scikit-learn底层已经帮你处理好了这些细节直接 fit 就行。但理解底层原理的好处是当结果异常时你知道该往哪个方向排查。注意正规方程要求 X^T X 可逆也就是特征之间不能存在完全共线性。一旦某两列线性相关矩阵就奇异了解析解不存在或者不唯一。这是线性回归第一个大坑也是后面岭回归要解决的核心问题之一。1.3 线性回归在真实项目中的典型应用场景线性回归虽然简单但应用场景一点都不少。我做过的一个设备寿命预测项目用振动频率、温度、运行时长等特征去预测剩余寿命线性回归作为基线模型效果就已经能打到可用水平。原因在于这些物理量和寿命之间本身就有较强的线性关系复杂模型反而容易过拟合。另一个常见场景是因果推断里的效果评估。比如某次营销活动上线后你想知道它到底带来了多少增量销售额。这时候可以用活动前的历史数据拟合一个线性回归预测活动期间如果没有活动的反事实销售额再用实际值减去预测值差值就是活动增量。这种方法在业务分析里非常普遍因为线性模型的系数可解释性强业务方容易接受。还有一类场景是特征筛选的前置步骤。当你手头有几百个特征不确定哪些有用时可以先跑一个线性回归看系数的显著性和正负方向快速筛掉一批明显无关的变量再上复杂模型。这样能省下大量调参时间。但线性回归的短板也很明显它对异常值敏感对共线性无能为力当特征数接近或超过样本数时直接失效。这些问题在实际数据里几乎必然出现所以我们需要岭回归和套索回归。2. 线性回归的软肋为什么需要正则化2.1 多重共线性系数估计的隐形杀手多重共线性指的是特征之间存在较强的线性相关关系。比如你同时把身高厘米和身高英寸放进模型这两个特征几乎完全相关模型无法区分它们各自的贡献系数会变得极不稳定。今天跑一遍数据身高厘米的系数是 0.5明天多采集几个样本可能变成 -2.3符号都反了。这种不稳定性在业务解释上是灾难。你没法告诉业务方这个特征影响是正的还是负的因为模型自己都说不准。更麻烦的是共线性不会降低模型的预测精度它只是让系数变得不可信。所以很多人跑完模型看预测误差还行就以为没问题实际上系数已经乱套了。检测共线性的常用方法是计算方差膨胀因子VIF。VIF 等于 1/(1-R²)其中 R² 是把某个特征对其他所有特征做回归得到的决定系数。VIF 超过 10 通常认为存在严重共线性超过 5 就值得警惕。我一般会在建模前跑一遍 VIF把 VIF 最高的特征逐个剔除直到所有特征都在可接受范围内。但剔除特征有个问题有时候每个特征都有业务意义你不想删任何一个。比如做用户画像时年龄、收入、消费频次都很重要删掉哪个都不合适。这时候岭回归就派上用场了它不删特征而是把系数压缩到一个更稳定的范围。2.2 过拟合模型记住了噪声而非规律当特征数量很多或者样本量相对较少时线性回归容易过拟合。过拟合的表现是在训练集上误差极小但在测试集上误差很大。原因是模型把训练数据里的随机噪声也当成了规律来学习。举个我实际遇到的例子。有个项目用 50 个样本预测房价特征有 30 个包括房间数、面积、楼层、装修年限等等。普通线性回归在训练集上的 R² 达到 0.98看起来完美但交叉验证的 R² 只有 0.3。这就是典型的过拟合——模型自由度太高把每个样本都记住了。判断过拟合的简单方法是看训练误差和验证误差的差距。如果训练误差远小于验证误差基本可以确定过拟合。另一个信号是系数绝对值异常大因为模型为了拟合每个点不得不让某些系数变得很大。解决过拟合的思路有两种一是减少特征数量二是限制系数的大小。前者对应套索回归后者对应岭回归。这两种正则化方法本质上都是在模型的偏差和方差之间做权衡牺牲一点训练集上的拟合精度换取更好的泛化能力。2.3 特征数超过样本数线性回归直接失效这是最极端的情况特征数 p 大于样本数 n。比如基因数据通常只有几十个样本但基因特征有上万个。这种情况下X^T X 是奇异矩阵无法求逆线性回归的解析解不存在。即使你用迭代方法强行求解也会得到无穷多组解每一组都能完美拟合训练数据但泛化能力极差。这种场景在生物信息、文本分类、推荐系统里非常常见。文本数据经过 TF-IDF 或词袋模型转换后特征维度轻松上万而标注样本可能只有几百条。这时候必须用正则化方法岭回归和套索回归都能处理 p n 的情况因为它们的目标函数里加了惩罚项保证了最优解的存在性和唯一性。提示当你发现特征数接近或超过样本数时不要犹豫直接上正则化。普通线性回归在这个场景下不是效果差而是根本不能用。3. 岭回归用 L2 惩罚换取稳定性3.1 L2 正则化的原理与系数压缩机制岭回归的目标函数是在残差平方和的基础上加上系数平方和的惩罚项Loss RSS α * Σwi²。这里的 α 是正则化强度控制惩罚的力度。α 越大系数被压缩得越厉害模型越简单α 越小越接近普通线性回归。为什么加 L2 惩罚能解决共线性问题从数学上看加入 αI 之后X^T X αI 一定是可逆的因为它是正定矩阵。这就保证了最优解的唯一性。从几何上看L2 惩罚相当于在系数空间里加了一个球形约束最优解被限制在这个球内不会跑到无穷远的地方去。岭回归的系数压缩是均匀的它会把所有系数都往零的方向拉但不会把任何一个系数精确地压到零。这意味着岭回归保留了所有特征只是削弱了它们的影响。对于共线性强的特征组岭回归会把它们的系数分摊开而不是像普通线性回归那样让它们互相抵消。我个人的经验是岭回归特别适合那种每个特征都有点用但特征之间相关性较高的场景。比如用户行为数据各种点击、浏览、收藏指标之间天然相关用岭回归比普通线性回归稳得多。3.2 正则化强度 α 的选择从交叉验证到岭迹图α 的选择是岭回归最关键的超参数。α 太大模型欠拟合所有系数都被压得太小预测能力下降α 太小正则化效果不明显又回到普通线性回归的老问题。常用的选择方法是 K 折交叉验证把数据分成 K 份每次用 K-1 份训练1 份验证选平均验证误差最小的 α。但交叉验证有个细节要注意α 的搜索范围要对数均匀分布比如从 0.001 到 1000 取若干个点而不是线性均匀分布。因为 α 的效果通常是指数级的线性取点会漏掉关键区间。scikit-learn 的 RidgeCV 默认就是用对数均匀的方式搜索。另一个实用工具是岭迹图也就是把不同 α 下的系数画出来。横轴是 α纵轴是系数值每个特征一条线。通过岭迹图可以直观看到系数随 α 增大而收缩的过程以及哪些特征对 α 特别敏感。我一般会先画岭迹图大致确定 α 的量级再用交叉验证精调。注意做交叉验证之前一定要先标准化特征。岭回归的惩罚项对系数大小敏感如果特征量纲不同比如一个特征是年龄0-100另一个是收入0-1000000惩罚会不公平地偏向大尺度特征。标准化之后所有特征都在同一尺度上惩罚才均衡。3.3 岭回归实操从数据准备到模型评估下面用一个模拟数据集走一遍完整流程。假设我们要预测某产品的销量特征包括价格、广告投入、季节指数、竞品价格等。import numpy as np from sklearn.linear_model import Ridge, RidgeCV from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score # 模拟数据 np.random.seed(42) n_samples 200 n_features 8 X np.random.randn(n_samples, n_features) # 构造共线性让第2列和第3列高度相关 X[:, 2] X[:, 1] * 0.95 np.random.randn(n_samples) * 0.1 true_w np.array([3.5, -2.0, 1.5, 0.0, 0.0, 2.5, -1.0, 0.5]) y X true_w np.random.randn(n_samples) * 0.5 # 划分数据集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) # 标准化 scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) X_test_scaled scaler.transform(X_test) # 用交叉验证选 alpha alphas np.logspace(-3, 3, 100) ridge_cv RidgeCV(alphasalphas, cv5, scoringneg_mean_squared_error) ridge_cv.fit(X_train_scaled, y_train) print(f最优 alpha: {ridge_cv.alpha_:.4f}) # 用最优 alpha 训练最终模型 ridge Ridge(alpharidge_cv.alpha_) ridge.fit(X_train_scaled, y_train) # 评估 y_pred ridge.predict(X_test_scaled) print(f测试集 MSE: {mean_squared_error(y_test, y_pred):.4f}) print(f测试集 R2: {r2_score(y_test, y_pred):.4f}) print(系数:, np.round(ridge.coef_, 3))这段代码里有几个关键点值得展开说。第一我故意构造了第2列和第3列的共线性模拟真实数据里的情况。第二标准化用的是训练集的均值和方差测试集必须用同样的参数变换否则会引入数据泄露。第三RidgeCV 内部已经做了交叉验证不需要我们再手动写循环。跑完这段代码你会看到最优 α 通常在 1 到 100 之间系数被压缩得比普通线性回归小但都没有变成零。测试集 R² 通常能到 0.9 以上比普通线性回归稳定得多。如果你把 Ridge 换成普通 LinearRegression在共线性严重的情况下系数可能会出现很大的正负值虽然预测精度可能差不多但系数完全没法解释。4. 套索回归用 L1 惩罚做特征选择4.1 L1 正则化的稀疏性从何而来套索回归的目标函数是 RSS α * Σ|wi|。和岭回归的区别就在惩罚项岭回归用的是平方套索回归用的是绝对值。这个看似微小的差别导致了完全不同的性质——套索回归会把一部分系数精确地压到零从而实现特征选择。为什么 L1 惩罚能产生稀疏解从几何上看L1 约束的区域是一个菱形二维情况下而 L2 约束的区域是一个圆。损失函数的等高线通常是椭圆椭圆和菱形相交时交点更容易落在菱形的顶点上而顶点对应的就是某些系数为零的位置。椭圆和圆相交时交点通常不会正好落在坐标轴上所以系数都不为零。这个几何解释很直观但实际意义更重要套索回归自动帮你做了特征筛选。当你手头有几百个特征其中大部分是噪声时套索回归能把无关特征的系数压到零留下真正有用的那些。这比手动做特征选择高效得多也比岭回归的结果更容易解释。但套索回归也有代价。当特征之间存在强相关时套索回归倾向于随机保留其中一个把其他的压到零。这意味着结果不稳定换一组样本可能保留的是另一个特征。如果你在意模型的稳定性而不是稀疏性岭回归更合适。4.2 弹性网络岭回归与套索回归的折中方案实际项目中纯套索回归有时候太激进把一些有用的特征也压没了。这时候可以用弹性网络它同时包含 L1 和 L2 惩罚Loss RSS α * (ρ * Σ|wi| (1-ρ) * Σwi²)。ρ 控制 L1 和 L2 的比例ρ1 就是套索回归ρ0 就是岭回归。弹性网络的好处是既能做特征选择又能在相关特征组里保持稳定。比如有一组高度相关的特征套索回归可能只留一个弹性网络会倾向于把它们一起保留或一起剔除结果更符合业务直觉。我一般会在以下情况优先考虑弹性网络特征数量很大且特征之间有分组结构比如同一类别的多个指标或者套索回归的结果在不同数据子集上差异很大。代价是要多调一个超参数 ρ计算量稍大但现在的计算资源基本不是问题。4.3 套索回归实操特征选择与系数路径可视化继续用上面的模拟数据这次换成套索回归看看系数是怎么被压到零的。from sklearn.linear_model import Lasso, LassoCV import matplotlib.pyplot as plt # 用交叉验证选 alpha lasso_cv LassoCV(alphasnp.logspace(-3, 1, 100), cv5, max_iter10000) lasso_cv.fit(X_train_scaled, y_train) print(f最优 alpha: {lasso_cv.alpha_:.4f}) # 最终模型 lasso Lasso(alphalasso_cv.alpha_, max_iter10000) lasso.fit(X_train_scaled, y_train) y_pred_lasso lasso.predict(X_test_scaled) print(f测试集 MSE: {mean_squared_error(y_test, y_pred_lasso):.4f}) print(f测试集 R2: {r2_score(y_test, y_pred_lasso):.4f}) print(系数:, np.round(lasso.coef_, 3)) print(f非零系数个数: {np.sum(lasso.coef_ ! 0)}) # 系数路径图 alphas_path np.logspace(-3, 1, 100) coefs [] for a in alphas_path: l Lasso(alphaa, max_iter10000) l.fit(X_train_scaled, y_train) coefs.append(l.coef_) coefs np.array(coefs) plt.figure(figsize(10, 6)) for i in range(n_features): plt.plot(alphas_path, coefs[:, i], labelf特征{i1}) plt.xscale(log) plt.xlabel(alpha) plt.ylabel(系数值) plt.title(套索回归系数路径) plt.legend() plt.grid(True, alpha0.3) plt.show()跑完这段代码你会发现一个有意思的现象随着 α 增大系数一个接一个地变成零而且变成零的顺序和特征的真实重要性大致对应。真实权重为零的特征第4、5个通常最先被压到零真实权重大的特征最后才被压到零。这就是套索回归做特征选择的直观体现。系数路径图是我每次做套索回归必看的图。它不仅能帮你理解 α 的影响还能帮你判断哪些特征是真的重要。如果某个特征的系数在很大的 α 范围内都保持非零说明它很稳健如果稍微增大 α 就变成零说明它的贡献可能只是噪声。提示套索回归的 max_iter 默认是 1000在 α 很小的时候可能不收敛。我一般会设成 10000 甚至更大避免因为迭代次数不够导致结果不准。如果还报收敛警告可以换用坐标下降法的优化版本或者检查数据是否需要标准化。5. 三种回归的对比与选型决策5.1 核心差异对照表维度线性回归岭回归套索回归惩罚项无L2系数平方和L1系数绝对值和系数是否为零否否是部分为零特征选择能力无无有处理共线性差好一般处理 p n不能能能可解释性高但共线性时差中高稀疏计算复杂度低低中适用场景特征少、无共线性特征多、共线性强特征多、需要筛选这张表是我在选型时最常参考的。但实际决策不能只看表还要结合数据特点和业务需求。比如你做一个需要向业务方解释每个特征影响的模型套索回归的稀疏性就很有价值如果你更在意预测精度岭回归通常更稳。5.2 选型决策树根据数据特征快速定位我总结了一个简单的决策流程基本能覆盖大部分场景第一步看特征数和样本数的关系。如果特征数远小于样本数且特征之间相关性低直接用普通线性回归简单可解释。如果特征数接近或超过样本数必须用正则化方法。第二步看特征之间是否存在强共线性。计算 VIF如果最大 VIF 超过 10优先考虑岭回归。如果共线性不严重继续下一步。第三步看是否需要特征选择。如果特征数量很大且你希望模型自动筛选出重要特征用套索回归或弹性网络。如果所有特征都有业务意义不想删任何一个用岭回归。第四步看结果稳定性要求。如果套索回归在不同数据子集上选出的特征差异很大改用弹性网络。如果弹性网络还是不稳定退回岭回归接受所有特征都保留但系数被压缩的结果。这个流程不是绝对的实际项目中经常需要几种方法都跑一遍对比交叉验证误差和业务可解释性再做最终决定。我个人的习惯是至少跑线性回归、岭回归、套索回归三个基线把它们的结果放在一起看往往能发现一些单看一个模型发现不了的问题。5.3 超参数调优的通用策略与常见误区三种回归里线性回归没有超参数岭回归和套索回归的核心超参数都是 α套索回归还多一个 max_iter弹性网络多一个 ρ。调参的通用策略是网格搜索加交叉验证但有几个细节容易踩坑。第一个坑是 α 的搜索范围。很多人默认用 scikit-learn 的默认值但默认范围不一定适合你的数据。我一般先用一个很宽的对数范围粗搜比如 10^-4 到 10^4看最优 α 落在哪个区间再在那个区间附近细搜。这样比一上来就细搜效率高得多。第二个坑是标准化。前面提过正则化对特征尺度敏感不标准化的话惩罚会偏向大尺度特征。但标准化也有个细节如果某个特征是二值特征0/1标准化之后会变成连续值解释性变差。这种情况下可以考虑只对连续特征标准化二值特征保持原样。第三个坑是交叉验证的折数。K 折交叉验证里K 越大评估越稳定但计算量也越大。我一般用 5 折或 10 折数据量特别小的时候用留一法。但要注意如果数据有时间顺序不能用随机划分必须用时间序列交叉验证否则会引入未来信息泄露。注意调参时不要只盯着一个指标。MSE 和 R² 是最常用的但它们对异常值敏感。如果数据里有极端值可以同时看 MAE平均绝对误差它对异常值更稳健。多个指标一起看能更全面地评估模型。6. 实战中的坑与排查经验6.1 数据泄露最隐蔽也最致命的错误数据泄露是指训练时用到了预测时拿不到的信息。在回归项目里最常见的泄露是标准化时用了全量数据的均值和方差。正确做法是只用训练集的统计量然后应用到测试集。我见过不少项目因为这个小细节离线评估 R² 高达 0.95上线后直接掉到 0.3。另一个常见泄露是特征里包含了目标变量的未来信息。比如预测用户是否会流失特征里用了用户过去30天的登录次数但如果这个特征是在用户已经流失之后统计的那就泄露了。做时间相关项目时每个特征都要问一句这个信息在预测时刻真的能拿到吗排查数据泄露的方法是做一次严格的时序划分用过去的数据训练用未来的数据测试。如果性能下降很多大概率有泄露。另一个方法是检查特征和目标的相关性如果某个特征和目标的相关性异常高比如 0.99要警惕它是不是目标的某种变形。6.2 异常值与缺失值的处理策略线性回归家族对异常值都敏感因为损失函数是平方的一个极端值能拉偏整个模型。处理异常值的第一步是识别常用方法是看标准化残差超过 3 倍标准差的样本值得关注。但不要一发现异常值就删先判断它是数据错误还是真实极端情况。数据错误就修正或删除真实极端情况可以考虑用 Huber 回归或分位数回归替代。缺失值的处理更复杂。简单方法是均值填充或中位数填充但会低估方差。进阶方法是用 KNN 填充或迭代填充效果更好但计算量大。我的经验是如果缺失比例低于 5%简单填充影响不大如果超过 20%要考虑这个特征是否还有保留价值或者把是否缺失本身作为一个特征。提示填充缺失值的时候一定要在训练集上计算填充值然后应用到测试集。如果用全量数据计算填充值同样是数据泄露。6.3 模型评估不要只看一个指标回归模型的评估指标很多MSE、RMSE、MAE、R²、调整 R²每个都有适用场景。MSE 对大误差惩罚重适合关注极端错误的场景MAE 对所有误差一视同仁适合关注平均表现的场景R² 衡量模型解释了多少方差但会随着特征增加而虚高所以要看调整 R²。我一般会同时报告 RMSE 和 MAE如果两者差距很大说明误差分布不均匀可能存在异常值。另外一定要看残差图横轴是预测值纵轴是残差。理想的残差图应该是随机分布的点云如果出现明显的模式比如漏斗形、U形说明模型设定有问题可能需要加非线性项或交互项。交叉验证的误差波动也值得关注。如果不同折之间的误差差异很大说明模型对数据划分敏感稳定性不够。这时候可以考虑增加数据量、减少特征数或者换用正则化更强的模型。6.4 常见问题速查表问题现象可能原因排查方法解决方案训练 R² 高测试 R² 低过拟合对比训练/测试误差增加正则化减少特征系数符号与业务直觉相反共线性计算 VIF岭回归或删除相关特征系数绝对值异常大共线性或未标准化检查特征尺度标准化加正则化套索回归结果不稳定特征强相关不同子集跑多次弹性网络或岭回归模型不收敛迭代次数不够看收敛警告增大 max_iter标准化预测值范围异常外推问题检查测试集特征范围限制预测范围加约束这张表是我这些年踩坑总结出来的基本覆盖了 80% 的常见问题。遇到新问题时先对照这张表排查往往能快速定位方向。7. 从基线到进阶回归模型的扩展思路7.1 多项式回归与交互项用线性模型拟合非线性关系线性回归的线性是对参数而言的你完全可以通过构造多项式特征来拟合非线性关系。比如把 x 变成 [x, x², x³]模型依然用最小二乘法求解但能拟合曲线。scikit-learn 的 PolynomialFeatures 可以自动生成这些项。但多项式回归有个风险特征数量会爆炸。如果有 10 个特征做 3 阶多项式展开特征数会变成 C(103, 3) 286 个。这时候必须配合正则化使用否则必然过拟合。我一般会先用线性模型看基线如果残差图显示明显的非线性模式再考虑加多项式项而且只加那些业务上说得通的项不要盲目全展开。交互项是另一种扩展方式表示两个特征的联合效应。比如价格和促销的交互项表示促销对价格敏感度的影响。交互项的业务解释性通常比多项式项更强我优先考虑交互项。7.2 广义线性模型把线性回归推广到更多场景普通线性回归假设目标变量是连续的、服从正态分布。但实际场景里目标变量可能是计数泊松分布、二值伯努利分布、正数偏态伽马分布。广义线性模型通过链接函数把线性预测值映射到目标变量的均值上覆盖了这些场景。比如泊松回归用于计数数据逻辑回归用于分类虽然名字叫回归但本质是分类。这些模型的目标函数不再是残差平方和而是对数似然求解方法也从解析解变成迭代优化。但核心思想一脉相承线性组合加正则化。理解了岭回归和套索回归迁移到广义线性模型的正则化版本如带 L1 惩罚的逻辑回归会容易很多。7.3 贝叶斯线性回归给出预测的不确定性普通线性回归给出的是点预测贝叶斯线性回归给出的是预测分布能告诉你预测的不确定性有多大。这在决策场景里很有价值如果预测值的不确定性很大你可以选择保守策略如果不确定性小可以更激进。贝叶斯线性回归的另一个好处是天然处理小样本。通过引入参数的先验分布相当于加了正则化。先验越强正则化越强。岭回归其实可以看作贝叶斯线性回归在高斯先验下的最大后验估计套索回归对应拉普拉斯先验。理解了这层关系你对正则化的理解会更深入。我在实际项目里用贝叶斯线性回归的场景不多主要是在需要量化不确定性的决策支持系统里。但它的思想值得了解尤其是当你需要向业务方解释这个预测有多可信的时候。8. 写在最后一些个人体会做了这么多回归项目我最大的体会是不要迷信复杂模型。很多业务问题用线性回归加正则化就能解决而且可解释性好、上线快、维护成本低。我见过太多团队一上来就上深度学习结果效果还不如精心调参的岭回归。另一个体会是特征工程比模型选择重要得多。同样一个岭回归特征做得好和做得差效果能差一倍。花时间理解业务、构造有意义的特征比花时间调 α 的收益高得多。最后一定要做基线。线性回归就是最好的基线它简单、快、可解释。如果复杂模型比线性回归好不了多少那就用线性回归。如果好很多再分析复杂模型到底学到了什么线性模型学不到的东西这往往能带来新的业务洞察。踩过几次坑之后我现在做回归项目的标准流程是先跑线性回归看基线再跑岭回归和套索回归对比画系数路径图和残差图检查 VIF 和异常值最后根据业务需求选一个最合适的。这个流程不花哨但稳。
阅读完成 · 觉得有帮助?