最小二乘法原理与实战:从数学建模到美赛应用全解析
1. 从“差不多”到“最合适”:最小二乘法的建模哲学
在数学建模竞赛里,尤其是像美赛(MCM/ICM)这种时间紧、任务重的比赛,我们拿到一堆数据,第一反应往往是“找个函数把它拟合出来”。你可能会随手在Excel里点个“趋势线”,或者用Python的numpy.polyfit跑一下,得到一个看起来不错的曲线。但有没有想过,为什么我们默认选择“最小二乘法”来做这件事?为什么不是让误差的绝对值之和最小,或者让最大误差最小?这个看似理所当然的选择背后,其实藏着一整套从高斯时代延续至今的数学建模哲学:我们不是在找一个“完美”的模型,而是在找一个“最不坏”的、在概率意义上最合理的近似。
最小二乘法的核心魅力,就在于它把“拟合”这件事,从一个模糊的“看起来像”,变成了一个清晰的数学优化问题:寻找一组参数,使得模型预测值与实际观测值之间差值的平方和达到最小。这个“平方和”就是目标函数,最小化它就成了我们的指挥棒。我参加过几次建模比赛,也带过不少队伍,发现很多新手同学只是把最小二乘法当作一个“黑箱”工具,输入数据,输出公式,然后就开始洋洋洒洒地写论文。这其实浪费了这个方法最精髓的部分——它本身就是一个完整的建模故事线,从问题假设、模型建立、求解到结果解释,环环相扣。
举个例子,2024年美赛B题(关于寻找失踪的水下装置)和C题(关于分析大型体育赛事中的策略)虽然题目迥异,但都大量涉及对历史数据或模拟数据的拟合与分析。如果你只是机械地调用fit函数,那么论文的“模型建立”部分就会显得苍白无力。但如果你能清晰地阐述:“我们假设观测误差是独立同分布的高斯噪声,在此假设下,最小二乘估计等价于最大似然估计,因此我们的拟合结果在统计意义上是最优的”,这瞬间就将模型的逼格拉满了。这不仅仅是“用了什么方法”,而是“为什么用这个方法”以及“这个方法为什么在这里是合理的”。评委,尤其是美赛的评委,非常看重这种深层次的建模逻辑。
所以,这篇内容我们不打算重复教科书上那些枯燥的公式推导,而是想结合数学建模竞赛的真实场景,拆解最小二乘法从原理、到实现、再到论文中如何优雅呈现的全过程。我们会看到,它不仅是线性回归的基石,更能通过巧妙的变换,处理曲线拟合、数据平滑、甚至微分方程参数估计等复杂问题。关键在于,你是否真正理解了手中的这把“瑞士军刀”。
2. 核心原理:误差的平方为何成为“黄金标准”
为什么是“平方”和,而不是别的?这个问题必须从根源上理解。设想我们有一组数据点(x_i, y_i),我们认为它们背后隐藏着一个线性关系y = kx + b。由于观测存在无法避免的误差ε_i,所以我们实际看到的是y_i = k*x_i + b + ε_i。
我们的目标是找到最优的k和b。最直观的想法是让总的误差Σ|ε_i|最小,即最小一乘法。这很合理,但它有个致命缺点:绝对值函数在零点不可导,这使得求解过程变得复杂,尤其是在没有计算机的年代,解析求解几乎不可能。而平方函数ε_i²处处光滑可导,这为后续的解析求解(求导令导数为零)铺平了道路,这是其被广泛采用的历史和计算原因。
但更深刻的理由在于统计学。如果我们假设这些误差ε_i是独立同分布的,并且服从均值为0、方差为σ²的正态分布(高斯分布),那么一个惊人的结论就出现了:使得误差平方和最小的参数k和b,恰好也是使得观测数据出现概率(似然函数)最大的参数。这就是著名的“最小二乘估计等价于正态误差假设下的最大似然估计”。
注意:这是最小二乘法在理论上最漂亮、最坚实的一块基石。在论文中,你可以简要说明:“鉴于我们对系统误差缺乏先验知识,采用中心极限定理,假设其服从正态分布是合理的。在此假设下,最小二乘法提供了参数的最优无偏估计。” 这一句话,就体现了你对模型假设的思考。
即使误差不严格服从正态分布,最小二乘估计仍然具有良好的性质,比如在众多线性无偏估计中,它的方差最小(高斯-马尔可夫定理)。这意味着,只要你的模型是线性的,且误差满足不相关、同方差、零均值等基本条件,最小二乘法给出的解就是“最佳线性无偏估计”。这个“最佳”指的是估计值的波动范围最小,最稳定。
从几何角度理解也很有趣。我们把所有观测值y看作一个高维空间中的向量,把所有可能的模型预测值ŷ = Xβ(其中X是包含x和常数项的设计矩阵,β是参数向量)看作一个由X的列向量张成的子空间。最小二乘法的目标,就是在这个子空间中找到一个点ŷ,使得它到真实观测点y的欧几里得距离最短。这个距离就是误差向量的模长,模长的平方就是误差平方和。所以,最小二乘解实际上是观测向量y在模型子空间上的正交投影。这个几何图像对于理解多重共线性等问题非常有帮助。
3. 从简单线性回归到矩阵狂飙:模型的统一表达
很多同学止步于y = kx + b的公式,但数学建模中的变量关系往往复杂得多。最小二乘法的强大之处在于,它能用一套统一的矩阵语言,处理从一元到多元,从线性到非线性的各种拟合问题。
3.1 一元线性回归:公式与手算理解
对于最简单的情况,我们有:S = Σ(y_i - (k*x_i + b))²分别对k和b求偏导并令其为零,可以得到著名的正规方程:
k = (nΣx_i y_i - Σx_i Σy_i) / (nΣx_i² - (Σx_i)²)b = (Σy_i - kΣx_i) / n
我建议在入门时,至少用手算或编程实现一次这个公式,而不是直接调用库。这能帮你深刻理解Σx_i²和(Σx_i)²的区别(后者是先求和再平方,这是方差计算中常见的坑),以及当x的取值非常接近时,分母会趋于零,导致k的计算极不稳定,这就是数值上的“病态问题”雏形。
3.2 多元线性回归:拥抱矩阵的世界
当自变量不止一个时,比如预测房价,要考虑面积、房间数、地段等多个因素,模型变为:y = β₀ + β₁*x₁ + β₂*x₂ + ... + β_p*x_p + ε这时,矩阵表示法就变得无比简洁和强大。记:
y为n×1的观测值向量。X为n×(p+1)的设计矩阵,第一列通常全为1(对应截距项β₀),后面各列是自变量观测值。β为(p+1)×1的待估参数向量。ε为n×1的误差向量。
模型可写为:y = Xβ + ε最小二乘的目标是极小化||y - Xβ||²,其解由正规方程给出:XᵀX β = Xᵀy如果XᵀX可逆(即X列满秩,自变量之间不存在严格的线性相关),则最优参数估计为:β̂ = (XᵀX)⁻¹ Xᵀy
这个公式是核心中的核心。在编程实现时,永远不要直接去计算(XᵀX)⁻¹! 因为XᵀX的条件数(Condition Number)是X条件数的平方,非常容易导致数值计算的不稳定(尤其是变量量纲差异大或存在多重共线性时)。正确的做法是使用数值更稳定的算法,如对X进行QR 分解或奇异值分解。在Python中,numpy.linalg.lstsq函数默认就使用了SVD方法,这才是生产环境中的标准操作。
import numpy as np # 假设 X 已经包含了常数列,y 是观测值 beta, residuals, rank, s = np.linalg.lstsq(X, y, rcond=None) # beta 就是参数估计值向量 # residuals 是残差平方和 # rank 是矩阵X的秩,用于判断是否满秩 # s 是X的奇异值,用于判断病态程度3.3 非线性模型的线性化:技巧与陷阱
很多物理、生物、经济模型本质上是非线性的,例如指数增长y = a e^{bx},幂律关系y = a x^b,或者饱和增长模型(Logistic函数)。最小二乘法处理的是线性参数,对于这些非线性模型,一个常用的技巧是“线性化”。
以指数模型为例:y = a e^{bx}。两边取自然对数:ln(y) = ln(a) + b*x。令Y = ln(y),A = ln(a),则模型转化为Y = A + b*x,成了一个关于(x, Y)的线性模型。我们可以用线性最小二乘法先估计出A和b,再通过a = e^A得到原参数。
这里有一个巨大的陷阱:你是在对变换后的数据Y = ln(y)做最小二乘,其目标是使Σ(ln(y_i) - (A + b*x_i))²最小,而不是使原始数据的误差平方和Σ(y_i - a e^{b*x_i})²最小。这两个目标函数不同,得到的最优参数a, b也不同。前者称为“线性最小二乘估计”,后者才是针对原始模型的“非线性最小二乘估计”。
实操心得:在数学建模论文中,如果你采用了线性化技巧,一定要在文中明确指出:“此处我们采用线性化变换以获得参数的初始估计值”。对于最终模型,如果精度要求高,更推荐使用非线性最小二乘算法(如Levenberg-Marquardt算法,
scipy.optimize.curve_fit就实现了该算法)对原始模型进行直接拟合,并将线性化得到的参数作为优化的初始值,这样可以有效避免陷入局部最优解。
import numpy as np from scipy.optimize import curve_fit # 定义原始的非线性模型函数 def exp_model(x, a, b): return a * np.exp(b * x) # 假设有数据 x_data, y_data # 使用 curve_fit 进行非线性最小二乘拟合 popt, pcov = curve_fit(exp_model, x_data, y_data, p0=[1, 0.1]) # p0是初始猜测值 # popt 是最优参数 [a, b] # pcov 是参数的协方差矩阵,可用于计算标准差4. 美赛实战:最小二乘法的场景化应用与论文呈现
在美赛的短短几天里,正确且高效地应用最小二乘法,并把它清晰地写在论文里,是得分的关键。下面结合常见题型,拆解几个实战场景。
4.1 场景一:数据拟合与趋势预测(如经济、环境数据)
这是最小二乘法最直接的应用。例如,题目给出一国过去50年的碳排放数据,要求预测未来趋势。
- 第一步:模型选择。不要一上来就用高阶多项式!先画散点图观察。是线性趋势?还是呈现加速(二次型)或减速(对数型、负指数型)?美赛特别看重模型选择的合理性。你可以尝试线性、二次、指数等几种简单模型,用残差平方和或更专业的赤池信息准则来比较哪个模型在拟合度和复杂度之间权衡得更好。
- 第二步:拟合与诊断。用工具拟合后,务必进行残差分析。将残差
e_i = y_i - ŷ_i画成关于x_i或ŷ_i的散点图。如果残差随机、均匀地分布在0轴上下,说明模型基本抓住了数据规律;如果残差呈现明显的趋势(如喇叭口、曲线形),则说明模型形式有误或存在异方差性,需要考虑更复杂的模型或进行变量变换。 - 第三步:论文书写。在论文的“模型建立”部分,你应该这样写:
- 陈述假设:“我们假设碳排放量与时间之间存在潜在的函数关系,并假设观测误差是随机的。”
- 定义目标:“为了量化这一关系,我们采用最小二乘法,寻找最优参数使得模型预测值与历史数据的误差平方和最小。目标函数为:
min Σ[CO2(t_i) - f(t_i; θ)]²,其中f是我们的候选模型,θ是参数向量。” - 展示求解:可以给出正规方程矩阵形式
(XᵀX)β = Xᵀy,并说明“我们利用Python的NumPy库,基于QR分解的稳定算法求解该方程组”。 - 呈现结果:给出拟合参数值和拟合曲线图。务必在图中同时画出原始数据点和拟合曲线,让评委一目了然。
- 模型检验:单独一个小节展示残差图,并进行分析:“如图x所示,残差随机分布,无明显模式,表明线性模型对数据的拟合是充分的。”
4.2 场景二:微分方程参数估计(如传染病、生态动力学模型)
美赛A题(连续型)经常涉及微分方程模型,例如SIR传染病模型。模型方程已知,但参数(如传染率β、恢复率γ)未知。我们的任务是利用实际疫情数据来估计这些参数。
- 核心思路:将微分方程离散化,或将数据与模型数值解进行比较。设
y(t; θ)是参数为θ的模型数值解(例如感染人数),y_data(t_i)是实际数据。定义误差e_i = y_data(t_i) - y(t_i; θ)。我们的目标就是最小化Σ e_i²。这变成了一个关于参数θ的非线性最小二乘问题。 - 实操步骤:
- 用ODE求解器(如
scipy.integrate.solve_ivp)编写一个函数,输入参数θ,输出模型在指定时间点t_i的数值解y(t_i)。 - 定义一个残差函数
residuals(θ) = y_data - y_model(θ)。 - 使用非线性最小二乘优化器(如
scipy.optimize.least_squares)来最小化残差向量的模长。
- 用ODE求解器(如
- 论文呈现要点:
- 强调这是一个“反问题”:我们是从数据中反推模型参数。
- 清晰说明你的损失函数是如何构建的。
- 给出优化后的参数值,并展示模型曲线与真实数据的拟合对比图。可以计算一下决定系数R²来量化拟合优度。
- 非常重要:讨论参数估计的不确定性。可以利用优化算法返回的雅可比矩阵近似计算参数的标准误或置信区间。在美赛论文中,即使简单提一句“参数的置信区间较窄,表明估计是可靠的”,也能显著提升模型的说服力。
4.3 场景三:数据平滑与去噪(如信号处理、GPS轨迹修正)
有时数据噪声很大,直接拟合效果很差。例如,从GPS设备获取的运动轨迹数据存在抖动。这时可以先对数据进行平滑处理,再分析趋势。移动平均和Savitzky-Golay滤波器本质上都是基于局部窗口的最小二乘拟合。
- Savitzky-Golay滤波:可以看作是一种广义的移动平均。它在每个数据点的局部窗口内,用一个低阶多项式进行最小二乘拟合,然后用这个多项式在该中心点的值作为平滑后的值。它的优点是能更好地保留数据的原始特征,如峰值和宽度,而移动平均则会使其钝化。
- 论文应用:如果你的模型需要对原始数据进行求导(比如从位移数据求速度、加速度),那么先使用Savitzky-Golay滤波进行平滑和微分是一步非常专业的操作。你可以在论文方法部分写道:“鉴于原始数据含有高频测量噪声,直接数值微分会放大噪声。我们采用Savitzky-Golay滤波器(窗口宽度为11,多项式阶数为3)对数据进行平滑处理,并同时获取其一阶导数估计。” 这体现了你对数据质量的重视和处理方法的专业性。
5. 进阶议题与常见“大坑”规避
掌握了基本应用,想要在美赛中脱颖而出,还需要了解下面这些进阶知识和避坑指南。
5.1 多重共线性:当变量“狼狈为奸”
当你用多元线性回归时,如果两个或更多自变量高度相关,就会产生多重共线性。这会导致XᵀX矩阵近乎奇异,参数估计β̂的方差变得极大,解极不稳定。今天一个数据点的微小变动,明天可能让某个参数的估计值发生翻天覆地的变化。
- 诊断方法:
- 方差膨胀因子:计算每个自变量的VIF。
VIF = 1 / (1 - R²),其中R²是该自变量对其他所有自变量回归的决定系数。通常,VIF > 10 就表明存在严重的共线性。 - 条件数:计算
XᵀX矩阵的条件数。条件数越大,矩阵越病态。
- 方差膨胀因子:计算每个自变量的VIF。
- 解决方案:
- 剔除变量:根据业务知识或统计检验(如p值),剔除不重要的相关变量。
- 主成分回归:对自变量进行主成分分析,用互不相关的主成分作为新的自变量进行回归。
- 岭回归:这是处理共线性最常用的正则化方法。它在损失函数中加入了对参数大小的惩罚项:
min ||y - Xβ||² + λ||β||²。参数λ控制惩罚力度。岭回归得到的估计是有偏的,但方差大大减小,整体预测误差可能更低。在Python中可以用sklearn.linear_model.Ridge。
5.2 异方差性:当误差“嫌贫爱富”
最小二乘的高斯-马尔可夫定理要求误差同方差。如果误差方差随着自变量的变化而变化(例如,在预测收入时,高收入群体的预测误差波动可能更大),就存在异方差性。这不会影响参数估计的无偏性,但会使得标准误的估计失效,从而导致假设检验(如t检验、F检验)和置信区间不可靠。
- 诊断方法:绘制残差
e_i关于拟合值ŷ_i的散点图。如果散点图呈现明显的漏斗形、扇形或其它系统性形状,则怀疑存在异方差。 - 解决方案:
- 变量变换:对因变量
y进行变换,如取对数ln(y)、平方根√y,常能稳定方差。 - 加权最小二乘法:给每个观测值赋予一个权重
w_i,通常取方差的倒数w_i = 1/σ_i²。目标函数变为min Σ w_i (y_i - ŷ_i)²。难点在于方差σ_i²未知,需要迭代估计。
- 变量变换:对因变量
5.3 过拟合:当模型“记忆”而非“学习”
特别是在使用多项式回归时,为了追求极小的训练误差,可能会使用非常高的阶数。这会导致模型不仅拟合了潜在规律,也拟合了数据中的随机噪声。其结果是在训练集上表现完美,但在新数据(测试集)上预测能力很差。
- 避免方法:
- 交叉验证:如果数据量允许,将数据分为训练集和验证集。用训练集拟合不同复杂度的模型(如不同阶数的多项式),在验证集上评估其误差,选择验证误差最小的模型。
- 正则化:如前所述的岭回归,以及Lasso回归(惩罚项为
λ||β||₁),都是通过惩罚参数大小来抑制模型复杂度,防止过拟合的有效手段。 - 信息准则:如AIC或BIC,它们在残差平方和的基础上,增加了对参数数量的惩罚,可以在单一数据集上比较不同模型的优劣。
5.4 异常点与强影响点:数据中的“叛徒”
个别偏离主体数据很远的点,可能会对最小二乘拟合结果产生不成比例的巨大影响,因为平方项放大了大误差的贡献。
- 诊断方法:
- 杠杆值:衡量一个数据点
x_i的“特殊性”,即其自变量取值远离样本均值的程度。高杠杆点可能对回归线产生强拉拽。 - 学生化残差:标准化后的残差。绝对值大于2或3的点值得警惕。
- Cook距离:综合衡量一个点对全部参数估计值的影响程度。Cook距离大的点需要重点审查。
- 杠杆值:衡量一个数据点
- 处理策略:
- 检查:首先检查是否是数据录入错误或测量失误。如果是,则修正或删除。
- 理解:如果不是错误,那么这个异常点可能蕴含着重要信息,需要从业务角度理解它为何特殊。
- 稳健回归:如果异常点无法删除且确实存在,可以考虑使用对异常值不敏感的稳健回归方法,如最小中位数二乘法或Huber回归,它们通过改变损失函数来削弱异常点的影响。
6. 代码实现与可视化:让结果自己说话
在美赛论文中,贴出关键、整洁的代码片段和具有说服力的图表,是加分项。这里给出一个完整的、包含诊断分析的多元线性回归示例。
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score, mean_squared_error from statsmodels.stats.outliers_influence import variance_inflation_factor from statsmodels.graphics.regressionplots import plot_leverage_resid2 import statsmodels.api as sm # 1. 数据准备与探索 # 假设df是一个Pandas DataFrame,包含因变量‘Price’和多个自变量 print(df.head()) print(df.describe()) sns.pairplot(df) # 查看变量间关系和分布 plt.show() # 2. 分离特征与目标,并添加常数项(截距) X = df[['Size', 'Bedrooms', 'Age']] # 示例特征 y = df['Price'] X = sm.add_constant(X) # 添加常数列,对应截距项β0 # 3. 使用statsmodels进行拟合,以获得详细的统计信息 model = sm.OLS(y, X).fit() print(model.summary()) # 打印非常详细的回归结果表,包括R², 系数,p值,置信区间等 # 4. 多重共线性诊断 vif_data = pd.DataFrame() vif_data["feature"] = X.columns vif_data["VIF"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] print("\n方差膨胀因子(VIF):") print(vif_data) # 5. 残差分析 residuals = model.resid fitted_values = model.fittedvalues fig, axes = plt.subplots(1, 3, figsize=(15, 4)) # 残差 vs 拟合值图 (检查异方差) axes[0].scatter(fitted_values, residuals, alpha=0.6) axes[0].axhline(y=0, color='r', linestyle='--') axes[0].set_xlabel('Fitted Values') axes[0].set_ylabel('Residuals') axes[0].set_title('Residuals vs Fitted') # 残差Q-Q图 (检查正态性) sm.qqplot(residuals, line='45', ax=axes[1]) axes[1].set_title('Q-Q Plot') # 残差直方图 (检查分布) axes[2].hist(residuals, bins=20, edgecolor='black', alpha=0.7) axes[2].set_xlabel('Residuals') axes[2].set_ylabel('Frequency') axes[2].set_title('Histogram of Residuals') plt.tight_layout() plt.show() # 6. 强影响点诊断 (Cook距离) influence = model.get_influence() cooks_d = influence.cooks_distance[0] # 通常认为Cook距离 > 4/n 或 > 0.5 的点需要关注 n = len(y) influential_points = np.where(cooks_d > 4/n)[0] print(f"\n可能的高影响力点索引 (Cook距离 > {4/n:.3f}): {influential_points}") # 7. 预测与可视化 (以单个变量为例,如果是一元回归) if X.shape[1] == 2: # 只有常数项和一个特征 plt.figure(figsize=(10,6)) plt.scatter(X.iloc[:,1], y, alpha=0.7, label='Actual Data') plt.plot(X.iloc[:,1], fitted_values, color='red', linewidth=2, label='Regression Line') plt.xlabel(X.columns[1]) plt.ylabel('Price') plt.legend() plt.title('Linear Regression Fit') plt.show()这段代码提供了从数据探索、模型拟合、统计检验、假设诊断到可视化的全流程。在论文中,你可以选择性展示关键输出(如模型摘要表、VIF表)和诊断图(残差图),并附上简短的文字说明:“我们的残差分析图显示,残差随机分布在零线附近,Q-Q图近似直线,表明误差的正态性假设基本满足。VIF值均小于5,表明不存在严重的多重共线性问题。” 这样的表述,配合代码和图表,构成了一个非常完整、专业的建模分析段落。
7. 在论文中构建你的最小二乘叙事线
最后,我们来谈谈如何在美赛论文的有限篇幅里,优雅地呈现你运用最小二乘法的过程。它不是孤立的一个公式,而是一条贯穿“模型建立”、“求解”、“检验”和“分析”的线索。
在“模型建立”部分:
- 定性引入:先说明你观察到数据中可能存在某种关系(线性、指数等)。
- 定量定义:明确提出你的模型形式,例如
Y = β₀ + β₁X₁ + ... + β_pX_p + ε。 - 阐明准则:清晰地写出你的优化目标:“为了确定最优参数β,我们采用最小二乘准则,即最小化残差平方和
S(β) = Σ(y_i - ŷ_i)²。” - 理论背书:简要提及你的假设(如误差独立、零均值、同方差)以及在此假设下最小二乘估计的良好性质(BLUE)。这体现了你的理论深度。
在“模型求解”部分:
- 方法陈述:说明你使用的具体算法。“我们通过求解正规方程
(XᵀX)β = Xᵀy来获得参数估计。在实际计算中,为保障数值稳定性,我们采用基于QR分解的矩阵求解算法(通过Python的numpy.linalg.lstsq函数实现)。” - 呈现结果:以清晰的表格形式给出参数估计值、标准误、t统计量和p值(如果做了统计检验)。例如:
- 方法陈述:说明你使用的具体算法。“我们通过求解正规方程
| 变量 | 系数估计 | 标准误 | t值 | p值 |
|---|---|---|---|---|
| 常数项 | 10.25 | 2.31 | 4.44 | <0.001 |
| 面积(Size) | 0.85 | 0.05 | 17.00 | <0.001 |
| 房间数(Bedrooms) | 5.30 | 1.20 | 4.42 | <0.001 |
- 在“模型检验与分析”部分:
- 拟合优度:报告R²和调整R²,解释模型对数据变异的解释程度。
- 假设验证:这是加分项!展示你的残差图、Q-Q图,并文字说明:“残差图显示无明显模式,Q-Q图近似直线,支持误差正态性和同方差性的假设。”
- 讨论与解释:解释参数的实际意义。“面积每增加1单位,房价平均上涨0.85单位,在统计上显著。” 同时,讨论任何发现的局限性,如:“尽管模型整体显著,但‘房间数’变量的系数相对较小且标准误较大,其实际预测贡献可能需要结合更多数据进一步确认。”
我个人在带队和评审中看到,能把最小二乘法这条叙事线讲清楚、讲透彻的论文,其逻辑分通常都很高。它展现的是一种严谨的、数据驱动的建模思维,而这正是美赛这类竞赛所推崇的核心能力。记住,你的目标不是展示你用了多高级的算法,而是展示你如何用一个经典、可靠的方法,清晰、可信地解决了问题。最小二乘法,就是这个舞台上经久不衰的“基本功”,练好了,足以应对大半江山。
