从学生成绩到广告预算,揭开线性回归的神秘面纱

张开发
2026/4/4 9:02:28 15 分钟阅读
从学生成绩到广告预算,揭开线性回归的神秘面纱
一条直线为什么能预测未来别被“机器学习”吓到线性回归其实比你想象中更懂生活。你是否想过这样的问题如果我想预测下周的销售额该怎么做想了解不同广告渠道的投放效果又该如何分析当听到“机器学习”这个词是不是觉得高深莫测其实答案可能比你想象的简单得多。今天我们抛开复杂的术语从一个所有人都能理解的角度来聊聊机器学习中最基础的“入门第一课”——线性回归。一、什么是线性回归从排队坐地铁说起每天早上坐地铁早高峰时协管员会让大家排队每个人与前一个人保持大约1米的距离。如果你新加入这个队伍你会站在哪里你可能会不假思索地站在队尾与前面的人保持1米距离——此时你的站位就是线性回归的预测值。线性回归其实就是用一条直线或一个超平面来描述两个或多个变量之间的关系。这条直线会尽可能地贴近所有已知数据点当我们有了新数据时只需将其代入这条直线就能得到预测结果。用数学公式来表达就是yβ0β1x1β2x2⋯βnxnyβ0β1x1β2x2⋯βnxn其中yy 是因变量我们想预测的结果x1,x2,…,xnx1,x2,…,xn 是自变量影响因素β0β0 是截距当所有自变量为0时的基准值β1,β2,…,βnβ1,β2,…,βn 是系数每个自变量对结果的影响程度如果只有一个自变量就是一元线性回归对应一条直线如果有多个自变量就是多元线性回归对应一个超平面。二、学完就能用用成绩预测案例跑通完整流程纸上得来终觉浅我们来看一个实际案例。假设某中学教师想研究学生每周学习时长与数学考试成绩之间的关系。收集了10名学生的数据学习时长小时[5, 8, 10, 12, 15, 3, 7, 9, 14, 6]考试成绩分[55, 65, 70, 75, 85, 50, 60, 72, 80, 58]用Python的sklearn库几行代码就能建立线性回归模型from sklearn.linear_model import LinearRegression X [[5], [8], [10], [12], [15], [3], [7], [9], [14], [6]] y [55, 65, 70, 75, 85, 50, 60, 72, 80, 58] model LinearRegression() model.fit(X, y) print(model.coef_) # 系数 ≈ 2.87每多学1小时成绩提高2.87分 print(model.intercept_) # 截距 ≈ 41.45基础分 print(model.predict([[11]])) # 预测学习11小时的成绩 ≈ 73.02分从这个例子可以直观看出每周每多学习1小时成绩大约提高2.87分基础分为41.45分。这个模型不仅能解释已有数据还能预测未知情况。三、为什么选择线性回归它真的“过时”了吗有人可能会问深度学习都这么强大了线性回归是不是该退休了恰恰相反。即使在2025年的今天线性回归依然活跃在各个领域。一项最新研究表明在预测陆地水储量TWS的任务中线性回归甚至比LSTM和Transformer等复杂深度学习模型表现更好。这说明有时候简单的方案反而是最好的。线性回归的适用场景非常广泛GDP预测可以通过投资、消费、出口等历史数据建立回归模型预测增长趋势广告效果评估可以量化不同渠道广告投入对销售额的影响来优化预算分配药物剂量研究可以分析药物剂量与患者生理指标之间的关系产品质量控制可以通过生产参数温度、压力、原料配比预测产品性能政策效果评估可以分析最低工资政策对就业率的影响气候变化建模可以用工业排放量、森林覆盖率等变量预测全球气温变化趋势。可以说只要想分析“因果关系”或做“趋势预测”线性回归都是一个极好的起点。四、如何找到“最佳”直线损失函数与最小二乘法找到了应用场景下一步自然要问怎么找到那条“最贴近数据”的直线这就要引入损失函数Loss Function的概念——衡量预测值与真实值之间差异的工具。差异越小模型越好。在线性回归中最常用的损失函数是均方误差Mean Squared ErrorMSEMSE1n∑i1n(f(xi)−yi)2MSEn1i1∑n(f(xi)−yi)2均方误差有三个重要特性它对大误差非常敏感因为平方操作会放大较大误差误差2→4误差10→100它是凸函数存在全局唯一最小值平方项使损失函数处处可导便于求解最优参数。基于均方误差最小化来求解模型的方法称为“最小二乘法”。在线性回归中最小二乘法就是试图找到一条直线或超平面使所有样本到直线或超平面上的欧氏距离之和最小。五、误差服从正态分布时为什么均方误差是最优选择这里有一个更深层的理解当误差服从正态分布时最小化均方误差等价于最大化似然函数。假设因变量与自变量的关系为 yiβTxieiyiβTxiei其中 eiei 为误差项。当误差独立同分布且服从正态分布时最大似然估计的目标就是最小化 ∑(yi−βTxi)2∑(yi−βTxi)2这正是均方误差的核心。这也解释了为什么线性回归如此有效——正态分布在自然界中无处不在。除了均方误差还有一种常用的损失函数平均绝对误差MAE。与均方误差不同平均绝对误差受异常值影响较小但对小误差的惩罚较弱。均方误差适用于误差呈正态分布、追求整体精度的场景而平均绝对误差适用于数据中存在显著异常值的场景。六、求解最优参数正规方程法与梯度下降法找到了目标函数下一步就是求解最优参数。求解线性回归的最优参数主要有两种方法正规方程法和梯度下降法。正规方程法一步到位的“解析解”正规方程法通过矩阵运算一步求得最优解。将损失函数写成矩阵形式J(β)1n∥Xβ−y∥221n(Xβ−y)T(Xβ−y)J(β)n1∥Xβ−y∥22n1(Xβ−y)T(Xβ−y)令梯度为0推导出的解为β(XTX)−1XTyβ(XTX)−1XTy正规方程法的优点一步计算不需要迭代和选择学习率对于特征数量少的数据集计算速度快。正规方程法的缺点当特征数量大时计算逆矩阵的时间复杂度是 O(n3)O(n3)计算量巨大只适用于线性回归模型通用性差。梯度下降法迭代逼近的“数值解”梯度下降法通过迭代方式逐步逼近最优解更新公式为βt1βt−α⋅∇J(βt)βt1βt−α⋅∇J(βt)其中 αα 是学习率控制步长∇J(βt)∇J(βt) 是目标函数的梯度。梯度方向指示了函数增长最快的方向因此负梯度方向是函数下降最快的方向。沿用之前学生成绩的例子初始化 β[1,1]Tβ[1,1]T学习率 α0.01α0.01。经过多次迭代参数逐渐逼近最优解β0→41.45β0→41.45β1→2.87β1→2.87损失值从3311.3降至约2.98。七、梯度下降的进阶知识变体与学习率梯度下降家族有几个重要变体批量梯度下降使用全部样本计算梯度梯度稳定但计算成本高随机梯度下降每次只用一个样本更新参数计算快但波动大小批量梯度下降每次用一小批样本在效率和稳定性之间取得平衡是深度学习的默认选择。学习率的选择至关重要。学习率过大可能导致参数越过最优解甚至发散学习率过小则收敛缓慢易陷入局部极小值。常见改进方法包括学习率衰减和自适应学习率优化器如Adam、Adagrad等。梯度下降法还有几个实践要点特征缩放可以将特征值缩放到相近范围来加快收敛速度使用动量法可以累积历史梯度方向来减少震荡。八、正规方程 vs 梯度下降一张表看懂区别对比维度正规方程法梯度下降法求解方式一步直接计算迭代逼近计算复杂度O(n3)O(n3)需计算逆矩阵O(k⋅n⋅m)O(k⋅n⋅m)与迭代次数相关特征数量适合特征较少如10000适合特征较多学习率无需设置需要调参通用性只适用于线性回归适用于多种模型数据集大小适合中小规模适合大规模简单来说特征少用正规方程特征多用梯度下降。九、实战案例用线性回归预测广告投放效果理论学得再多不如动手跑一个完整项目。让我们使用经典的Advertising数据集用线性回归预测不同广告渠道的投放效果。该数据集包含200个样本记录了三个渠道的广告预算单位千元和对应销售额单位百万元TV电视广告预算Radio广播广告预算Newspaper报纸广告预算Sales销售额完整代码如下import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression, SGDRegressor from sklearn.metrics import mean_squared_error # 加载数据 advertising pd.read_csv(data/advertising.csv) advertising.drop(advertising.columns[0], axis1, inplaceTrue) advertising.dropna(inplaceTrue) # 划分训练集与测试集70%训练30%测试 X advertising.drop(Sales, axis1) y advertising[Sales] x_train, x_test, y_train, y_test train_test_split( X, y, test_size0.3, random_state0 ) # 标准化让特征处于同一量级加速梯度下降收敛 preprocessor StandardScaler() x_train preprocessor.fit_transform(x_train) x_test preprocessor.transform(x_test) # 正规方程法 normal_equation LinearRegression() normal_equation.fit(x_train, y_train) print(正规方程法系数:, normal_equation.coef_) print(正规方程法偏置:, normal_equation.intercept_) # 梯度下降法SGDRegressor gradient_descent SGDRegressor() gradient_descent.fit(x_train, y_train) print(梯度下降法系数:, gradient_descent.coef_) print(梯度下降法偏置:, gradient_descent.intercept_) # 评估 print(正规方程法MSE:, mean_squared_error(y_test, normal_equation.predict(x_test))) print(梯度下降法MSE:, mean_squared_error(y_test, gradient_descent.predict(x_test)))一个有趣的发现实际研究显示电视广告对销售额的影响最为显著报纸广告影响最弱广播广告影响居中。这个结论直接指导企业合理分配广告预算。写在最后线性回归就像一个“老司机”。它不追求花哨的噱头只用最朴实的方法解决问题。它简单、透明、可解释——每个系数都能告诉你“这个因素对结果有多大影响”。在学习机器学习的道路上线性回归是最好的起点。它能帮你建立机器学习的基本思维框架理解损失函数、优化算法等核心概念在绝大多数实际问题中它都能给出足够好的答案。所以不妨从今天开始拿起你的数据用线性回归去探索变量之间的关系。也许你会发现世界比你想象的更有“规律”可循。如果这篇文章对你有帮助欢迎点赞、收藏、转发让更多人了解线性回归的魅力

更多文章