news 2026/10/16 19:08:28

线性回归实战指南:从损失函数到Sklearn建模全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线性回归实战指南:从损失函数到Sklearn建模全流程

聊到机器学习入门,线性回归几乎是所有人绕不开的第一个模型。它简单、直观、可解释性强,但在实际项目中,我发现不少同学用sklearn调包时,对背后的损失函数和优化逻辑其实是一知半解的。换个数据分布就不知道模型在做什么,出了异常结果也不知道该往哪个方向排查。这篇文章想做的事情,是把线性回归、损失函数、优化方法和统计学习视角这四件事串起来讲清楚,最后再配合一套完整的sklearn实操流程。不管你是刚接触机器学习的新手,还是想系统梳理基础知识的从业者,这篇文章都应该对你有帮助。

1. 线性回归到底在解决什么问题

1.1 从一次房价预测说起

先抛出一个场景:假设你手里有一批房子的数据,包括面积、卧室数量、房龄,以及对应的成交价格。现在来了一个新房源,只有面积和卧室数量,你希望预估它能卖多少钱。这就是最典型的回归问题——预测一个连续数值。

线性回归的假设非常朴素:目标值和特征之间可以用一条线(在高维空间里是一个超平面)的关系来描述。用数学表达就是:

y = w1*x1 + w2*x2 + ... + wn*xn + b

放在房价的场景里,x1是面积,x2是卧室数量,w1、w2就是对应的权重,b是偏置。这个公式在高中就学过,但很多人没意识到的是,它背后藏着一个极强的假设——特征和目标之间是线性关系。

这个假设既是线性回归的优点,也是它的局限。

优点是模型足够简单,计算开销极低,且权重w有明确的业务含义。比如w1 = 5000,意思就是面积每增加一平方米,房价平均增加 5000 元,这在实际业务汇报里非常有说服力。局限在于,现实世界中的关系绝大多数不是线性的,强行用一条线去拟合弯弯曲曲的数据,效果自然不会好。所以线性回归更准确的定位应该是基线模型——先拿它跑通流程、建立基准,后续再考虑决策树、神经网络这类复杂模型。

1.2 线性回归的数学视角与矩阵形式

一元线性回归写出来是y = wx + b,但实际项目中极少只有单个特征。一般我们会把特征拼成一个矩阵X,形状是(m, n),m代表样本数,n代表特征数,权重向量是w,形状是(n, 1),偏置可以合并进权重向量,最终变成:

y_pred = X * w

这里我把偏置b合并到了w里,对应的做法是在X上拼一列全 1。用矩阵的好处是运算统一,无论是一百个特征还是一万个特征,公式的表达形式完全相同,后面推导优化方法时也方便。

核心目标自然就变成了:找到一组w,使得模型预测的y_pred与真实标签y之间的差异尽可能小。关键问题来了——“差异”怎么定义?这就引出了损失函数的概念。

2. 损失的定义:为什么必须有一个量化的目标

2.1 损失函数的本质是“打分器”

做任何优化,首先要有一个明确的量化指标。没有指标就没法比较两套参数谁更好。损失函数干的就是这件事:输入一组参数,计算出一个数值,这个数值越小代表模型输出越接近真实值。

对于回归问题,最自然的想法是计算预测值和真实值的差,也就是残差:

残差 = y_true - y_pred

问题在于,残差可能是正也可能是负,直接求和会正负抵消。比如两个样本的残差分别是 +50 和 -50,平均残差为 0,但这显然不代表模型预测得很准。所以需要给残差做一个变换,让正负差异都变成“惩罚”。

于是有了两种最基础的损失定义:

  • MSE(均方误差):对残差取平方,再求平均。
  • MAE(平均绝对误差):对残差取绝对值,再求平均。

数学形式如下:

MSE = (1/m) * sum((y_true - y_pred)^2) MAE = (1/m) * sum(|y_true - y_pred|)

从直观感受上说,MSE 就像用欧氏距离去度量误差,而 MAE 用的是曼哈顿距离。两者最本质的差异在于:平方操作放大了大误差的影响。如果某个样本的预测误差是 10,另一个是 1,在 MSE 中前者贡献的损失是后者的 100 倍,而在 MAE 中只是 10 倍。这个特性直接决定了模型对异常值的敏感程度。

2.2 选择不同损失的实际影响

在实际业务场景里,选择 MSE 还是 MAE,背后是风险偏好的问题。

如果你的数据整体比较干净,没有明显异常值,MSE 是更常用的选择,因为它的数学性质非常好——处处可导,求导简单,优化收敛快。这一点在后面讲梯度下降时非常关键。

但如果你处理的数据里存在大量离群点,比如房价数据中混入了一些靠特殊关系天价成交的案例,用 MSE 会让模型拼命去拟合这些异常样本,导致整体预测偏移。这种情况下 MAE 会更加稳健,因为绝对值不会对大误差赋予二次级的权重。

有没有两全其美的方案?有。实际工程里经常用Huber损失,它定义了一个阈值delta,误差小于delta时按 MSE 计算,大于等于delta时按 MAE 计算。这样做既保留了 MSE 在零点附近的平滑性,又限定了大误差的惩罚上界,对异常值有一定的容忍度。sklearn的HuberRegressor使用的就是这种损失。

提示:损失函数不是凭空选择的,它隐含着你对数据噪声分布的假设。这一点会直接影响后续优化目标的合理性,后面我会专门讲统计视角的部分。

3. 优化方法:怎么把损失降到最低

3.1 最小二乘的解析解

有了损失函数,下一步就是求解使损失最小的w。对于 MSE 损失,有一个著名的解析解,也叫正规方程:

w = (X^T * X)^(-1) * X^T * y

推导思路也不复杂:对损失函数关于w求导,令导数为零,解出来的就是极值点。因为 MSE 是关于w的凸函数(可以理解为碗状的曲面,只有一个最低点),所以这个极值点就是全局最优解。

这套方法在学术上叫最小二乘法,它就像解一元二次方程一样,直接一套公式算出答案。如果特征维度不高、样本量适中,这是最快速稳定的方案,不需要迭代。

问题出在哪里呢?

第一,X^T * X的逆矩阵不一定存在。当特征之间存在高度相关性(多重共线性)时,矩阵可能接近奇异,求逆的数值极不稳定,算出来的w会剧烈震荡。第二,计算X^T * X的复杂度是O(n^3),n是特征数量。当特征数上万甚至上百万时,这个矩阵无论是存储还是求逆都变得不可接受。第三,如果数据量特别大,把所有数据都装进内存构建矩阵本身就是个麻烦事。

因此,虽然解析解在教科书上占有重要位置,但在现代机器学习实践中,迭代式的优化方法才是主力。

3.2 梯度下降法的核心逻辑

梯度下降的思路可以这样理解:想象你站在山坡上,目标是走到山谷最低点。你看不清全局路径,但能感觉到脚下的坡向哪个方向倾斜——沿着最陡的下坡方向迈步,反复迭代,最终就会接近谷底。这里的“山坡”就是损失函数曲面,“最陡下坡方向”就是梯度的反方向。

梯度是损失函数对参数w的偏导数向量。用 mse 举例,对某个权重wj求偏导的结果是:

dL/dwj = (-2/m) * sum((y_true - y_pred) * xj)

每次参数更新的方式就是:

w_new = w_old - learning_rate * gradient

这里的learning_rate(学习率)决定了每次迈步的幅度。

学习率太大,可能一步跨过谷底,在两端来回震荡,甚至发散;学习率太小,收敛速度会非常慢,训练半天还在半山腰。实际调参时,我一般习惯从0.01或0.001起步,观察损失曲线的变化再做调整。

3.3 三种梯度下降变体的取舍

按每次计算梯度时使用的样本量,可以把梯度下降分为三类:

类型每次更新使用样本量优点缺点
批量梯度下降(BGD)全部样本方向准确,收敛平稳计算量大,大数据集上速度慢
随机梯度下降(SGD)单个样本计算快,能逃离局部极小点更新方向波动大,收敛不稳定
小批量梯度下降(Mini-batch SGD)小批量样本(如32/64/128)兼顾效率和稳定性需要调batch size

实际工程中用到最多的就是小批量梯度下降。batch size的直觉是:每次从全部数据里抽出一个小队来估计山坡走向,虽然每次的估计有噪声,但多估几次平均下来,方向也足够准确。更妙的是,这个噪声在深度学习场景下还能帮助模型跳出局部极小点,算意外的收获。

现代企业级框架里的优化器,比如动量法、Adam,本质都是在小批量梯度下降的基础上,加入了历史梯度信息来自适应地调整学习率。但从理解的角度,剥开这些外壳,内核依然是“沿着梯度反方向走一段”。

3.4 特征缩放为什么如此重要

梯度下降有一个特别容易踩的坑:特征量纲差异过大会严重拖慢收敛速度。

假设一个特征是面积,取值范围在几十到几百平方米,另一个特征是房龄,取值范围在 1 到 50 年。两者数值范围差异明显,导致损失函数曲面变成狭长的“峡谷”形状——在某个方向上变化剧烈,在另一个方向上变化平缓。梯度下降在这种地形上会走“之”字形路线,来回震荡。

解决办法就是特征缩放,其中最常用的就是标准化(Standardization):

x_scaled = (x - mean) / std

处理之后每个特征的均值接近 0,方差接近 1,损失函数曲面变得更接近圆形,梯度下降的收敛速度大幅提升。这一点在用梯度下降训练任何模型前都应作为默认操作。

4. 用统计学习的方法重新理解线性回归

4.1 最大似然估计与噪声假设

前面的推导都是从几何、优化的角度理解线性回归,但统计学习视角能回答一个更深层的问题:为什么 MSE 是一个合理的损失?

设想一个真实业务场景,房价通常有一个价格区间,即使是完全相同的面积和房龄,最终成交价也会略有浮动。这说明目标值y并不是w*x + b的确定输出,而是叠加了某种随机噪声。在统计模型里,我们把这种噪声建模成一种概率分布。

一个最经典的假设是:噪声服从均值为 0 的高斯分布(正态分布)。数学上写成:

y = w*x + b + epsilon, epsilon ~ N(0, sigma^2)

如果把每个样本的真实值看成是从以预测值为均值的高斯分布中采样得到的,那么用最大似然估计去推导参数,结果会非常惊人:最大化似然函数等价于最小化 MSE。

换句话说,选择 MSE 做损失函数,暗含了一个假设——数据中的噪声服从高斯分布。这不是数学上的巧合,而是统计学习里“模型假设”和“目标函数”相匹配的具体体现。同理,如果你选择 MAE 作为损失,其概率假设其实是噪声服从拉普拉斯分布(Laplace distribution),这种分布有更重的尾部,对应着更容易出现极端值的场景。

这个视角的价值在于:当你面对一个实际问题时,可以先思考数据噪声可能的长相,再选择匹配的损失函数,而不是盲目套用 MSE。

4.2 偏差-方差权衡与模型复杂度

统计学习里另一个绕不开的概念是偏差-方差权衡。简单来说,模型的总误差可以分解为三部分:

总误差 = 偏差^2 + 方差 + 不可约噪声
  • 偏差:模型预测的平均值与真实值的差异,反映模型的表达能力够不够。
  • 方差:不同训练集上训练出的模型预测的波动程度,反映模型对数据的敏感程度。

在线性回归的语境下,如果只用一个特征去预测非常复杂的关系,偏差会非常大,模型欠拟合。反过来,往里加入大量特征,包括各种高次项、交叉项,模型在训练集上表现极好,但稍微换个测试集效果就崩了,这就是方差过大,也叫过拟合。

引入正则化就是在这两者之间找平衡点。最常见的两种正则化方式:

  • L2正则化(岭回归 Ridge):在损失函数上加alpha * sum(w^2),倾向于把权重压缩到接近 0,但不等于 0。
  • L1正则化(Lasso):在损失函数上加alpha * sum(|w|),倾向于把一部分权重直接变为 0,实现特征选择。

从贝叶斯统计视角看,L2 正则化相当于给权重加了高斯先验,L1 正则化相当于给权重加了拉普拉斯先验。先验的直觉是:在没有任何证据之前,我们倾向于相信权重不会太大,这样防止模型因为个别特征的微小变化而产生剧烈波动。

4.3 评估模型的统计指标

统计学习视角也提供了一套衡量模型效果的指标。最常用的有:

  • MSE / RMSE:RMSE 是 MSE 的平方根,量纲与预测值一致,解释起来更直观。
  • MAE:平均绝对误差,更稳健。
  • R2(决定系数):表示模型解释了目标变量多少比例的方差,范围通常在 0 到 1 之间。R2 越接近 1,说明模型越能解释数据的变异性。

R2 的计算公式是:

R2 = 1 - SSE / SST

其中SSE是预测残差平方和,SST是目标值总体方差之和。一个不太为人知的小细节是:在多元回归中,R2 会随着特征数量的增加而单调上升,哪怕加进来的特征毫无意义。所以千万不能单纯用 R2 来对比不同特征数量的模型,这时应该看调整后的 R2(adjusted R2),或者直接用交叉验证的结果来评估。

5. Sklearn 实操:一个完整的线性回归流程

5.1 准备数据与划分训练集

理论知识说得再多,最终都要落到代码上。我用sklearn带你完整跑一遍线性回归流程。这里的示例数据用内置的糖尿病数据集,它包含数值特征,非常适合演示回归流程。

import numpy as np import pandas as pd from sklearn.datasets import load_diabetes from sklearn.model_selection import train_test_split # 加载数据 diabetes = load_diabetes() X = diabetes.data y = diabetes.target # 切分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) print("训练集样本量:", X_train.shape[0]) print("测试集样本量:", X_test.shape[0])

train_test_split里的random_state参数建议固定,这样每次运行的结果是可复现的,排查问题也更方便。test_size=0.2是常用的切分比例,但有个细节值得注意:如果数据集本身只有几百条样本,留 20% 做测试集可能导致测试结果方差较大,这时建议改用交叉验证。

5.2 训练模型与评估指标

接下来用LinearRegression训练模型,并输出多个评估指标:

from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # 训练模型 model = LinearRegression() model.fit(X_train, y_train) # 预测与评估 y_pred = model.predict(X_test) mse = mean_squared_error(y_test, y_pred) mae = mean_absolute_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print("MSE:", round(mse, 2)) print("MAE:", round(mae, 2)) print("RMSE:", round(np.sqrt(mse), 2)) print("R2:", round(r2, 4))

这里我额外计算了 RMSE。因为 MSE 是残差的平方,数值会被放大,看起来不够直观,RMSE 的量纲和原始预测值一致,在跟业务方沟通时更友好。R2 在 0 到 1 之间,越接近 1 说明模型的解释能力越强。

有一点我必须提醒:在训练之前,务必要考虑特征缩放的问题。虽然LinearRegression在 sklearn 的实现里用了最小二乘的求解方式(scipy的lstsq),对特征缩放相对不敏感,但如果你后面换成岭回归或 SGD 回归,特征量纲差异会实实在在影响结果。所以,标准流程里我还是建议加上StandardScaler。

5.3 用 Pipeline 串联特征处理与模型

很多初学者在实操时会手忙脚乱地先做特征缩放,再训练模型,但一旦涉及交叉验证,就容易出问题:缩放器如果在切分前就对全量数据拟合,会引入数据泄漏,导致评估结果虚高。正确做法是把缩放器和模型放进同一个 Pipeline,在每个交叉验证折里只对训练部分拟合缩放器。

from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import RidgeCV # 使用 Pipeline pipe = make_pipeline( StandardScaler(), RidgeCV(alphas=[0.1, 1.0, 10.0]) ) pipe.fit(X_train, y_train) print("Ridge 最优 alpha:", pipe.named_steps['ridgecv'].alpha_) print("Pipeline R2:", r2_score(y_test, pipe.predict(X_test)))

RidgeCV的好处是能帮我们在给定的alpha列表中自动选择最优正则化强度,省去了手工调参的循环。用 Pipeline 之后,交叉验证、网格搜索都会自动遵循“先缩放后训练”的正确流程,这是避免隐蔽 Bug 的最有效手段。

5.4 正则化模型的对比实验

为了让“正则化为什么有用”更直观,我建议做一次对比实验。我们用同一个数据集,分别训练LinearRegression、Ridge(L2)和Lasso(L1),并对比它们在测试集上的表现:

from sklearn.linear_model import Ridge, Lasso models = { "Linear": LinearRegression(), "Ridge": Ridge(alpha=1.0), "Lasso": Lasso(alpha=1.0) } for name, model in models.items(): pipe_model = make_pipeline(StandardScaler(), model) pipe_model.fit(X_train, y_train) score = r2_score(y_test, pipe_model.predict(X_test)) print(f"{name}: R2 = {score:.4f}")

实验跑下来,你大概率会发现 Ridge 和 Lasso 在这个数据集上的表现跟普通线性回归差不多,甚至略好一点。这背后的原因是:这个数据集的特征之间存在一定程度的相关性,普通最小二乘的解不稳定,正则化通过约束权重幅度稳定了解,提升泛化能力。如果特征相关性强、样本量又不大,这种差异会更明显。这就是看现象、懂原理的过程——实验结果不是孤立的数字,而是跟前面的理论对应得上的。

6. 实操中的常见问题与排查技巧

6.1 多重共线性问题

特征之间高度相关时,权重w的估计会变得非常不稳定。举个例子,同时把“房子总面积”和“卧室面积”作为特征,这两个变量本身就是高度相关的,最小二乘解可能会给出一个极大正权重和一个极大负权重,两者互相抵消,模型看似能用,但换一批数据就崩了。

排查方法:看相关系数矩阵,如果特征间相关系数绝对值超过 0.8,就要警惕了。处理手段有三个方向:一是去掉其中一个冗余特征;二是用 L2 正则化(Ridge)来稳定解;三是用 PCA 降维后重新建模。

6.2 异常值的影响

前面提到,MSE 对异常值非常敏感。实际项目中我遇到过一组销量预测数据,里面有几条因为大促活动产生的高成交量记录,模型为了拟合它们,整体预测明显偏高。排查时画残差图是最直观的手段——横轴是预测值,纵轴是残差,正常时残差应该均匀分布在 0 附近。如果发现个别点的残差绝对值特别大,就要考虑是不是异常值在作祟。

处理方案:先业务核对数据是否录错,确认真实值后,再决定是否使用 Huber 回归或直接剔除极端样本。这里特别强调,不能动不动就删异常值,要先理解它为什么异常。

6.3 特征与目标之间的非线性关系

线性回归对“线性关系”的假设相当严格,但实际数据很少是线性关系。比如房价可能随着面积的增加先快速增长,再逐渐放缓(边际递减效应),直接用一条直线去拟合,残差会呈现明显的曲面状。

处理方案:对特征做多项式扩展,比如把x变成x、x^2、x^3,然后仍然用线性模型去拟合。这就是多项式回归,它在模型层面依然是线性模型,只是特征被人工变换过。sklearn里的PolynomialFeatures可以方便地完成这个操作,但要注意:多项式特征会产生更多的特征组合,加大过拟合风险,这时候强烈建议配合 Ridge 或 Lasso 一起使用。

6.4 学习率与梯度下降的调试经验

有一类项目你会用SGDRegressor来替代LinearRegression,这时学习率的选择变得很关键。实际经验是:先跑 100 步,打印损失值,观察是在稳步下降还是在震荡。如果损失在剧烈波动,把学习率调小十倍再试;如果每一步下降极其缓慢,也不要急着调大学习率,先确认特征是否做了标准化。

有一个简便的判断方法:学习率偏大时损失曲线高频振荡,偏小时损失下降极其缓慢。我自己习惯先设一个较大的学习率快速粗调,等接近最优区域再把学习率调小精调。这个策略用在学习率衰减机制里就是最常见的学习率调度。

7. 从 LR 之外看扩展选择

7.1 什么时候该放弃线性回归

线性回归虽说基础,但绝不是万能的。当出现以下情况时,我会建议主动换模型:

  • 特征跟目标之间存在复杂的非线性关系,并且多项式扩展维度爆炸;
  • 特征之间相互作用明显,比如广告投放策略的效果取决于当前产品的定价区间,这类交互效应线性模型很难自动捕捉;
  • 数据量非常大,且关注预测精度多于可解释性。

这些场景下,决策树类模型(如随机森林、XGBoost)或者浅层神经网络往往能拿到更好的效果。但请注意,即使要换模型,线性回归依然值得先跑一遍,因为它能给一个低成本的基线分数。如果复杂模型连这个基线都打不过,要么是数据预处理有问题,要么是模型参数没调好。

7.2 线性回归的假设怎么check

很多人学线性回归时知道“四大假设”,但实操中很少见人去认真核验。我的建议是,把验证做成一套固定流程:画残差图看方差齐性,看 Q-Q 图检查正态性,计算 VIF 检查多重共线性,排序残差看是否出现系统性趋势。虽然这些检验在大型生产项目中往往被跳过,但在建模早期阶段做一轮核验,能帮你提前发现大量数据质量隐患。

8. 最后分享一点个人经验

在做机器学习项目的这些年里,我越来越体会到:很多人会背复杂模型的公式,却讲不清最简单的线性回归里损失函数的概率意义。这恰恰是根基。线性回归看似简单,但它把所有核心概念串在了一起——模型假设、目标定义、优化求解、评估决策。把这套链路吃透,后面学逻辑回归、SVM、神经网络都会事半功倍。

有一个小技巧分享给大家:当你用sklearn处理回归问题时,不要只盯着训练集上的 R2。先把数据标准化、画出残差分布、跑一遍线性回归作为基线,再尝试岭回归、Lasso,最后如果效果还不够,再上树模型或神经网络。每一层推进都要带着上一轮的经验和判断,而不是一通乱调。这套思维框架,比背住任何一组参数都好用。

我在实际项目中踩过好几次“用 MSE 优化却拿 MAE 汇报”的坑。归根结底,损失函数要和业务目标对齐。如果业务方最后关心的是预测值偏离多少个单位,那就优先关注 MAE 和 RMSE,而不是和一个平方后的数字较劲。损失函数的选择不是一个学术问题,它直接反映你对数据、对业务的理解深度。这一点,无论你以后做多少年机器学习,都会反复遇到。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 11:01:22

AI搜索优化 和 SEO优化的区别

1. 引言 随着人工智能技术的快速发展,搜索引擎的形态正在发生深刻变化。传统的关键词匹配时代正在向语义理解时代过渡,AI搜索优化(AISO)与传统的SEO优化(搜索引擎优化)成为内容创作者和运营人员必须理解的两…

作者头像 李华
网站建设 2026/10/16 19:08:28

SHAP模型可解释性实战:原理、Python实现与4大误读避坑指南

1. 从一个真实困惑说起:模型为什么这么判我第一次被SHAP“教育”,是在一个信贷评分模型上。模型AUC 0.81,上线前评审会上业务方问了一句:“这个客户为什么被拒?”我打开特征重要性排序,说“因为近半年查询次…

作者头像 李华
网站建设 2026/10/16 19:08:32

AT89C51多点温度检测系统:DS18B20时序与LCD显示硬核调优

简介:本资源是一份面向单片机初学者与课程设计学生的完整嵌入式实践项目资料,聚焦多点温度检测这一典型工业与家电应用场景。项目基于AT89C51单片机为核心控制器,采用DS18B20单总线数字温度传感器实现双点高精度测温(-30℃&#x…

作者头像 李华
网站建设 2026/10/16 19:08:34

麦克风阵列音频检查:一致性、时延与波束指向的工程实践

简介:这份文档面向硬件工程师、声学测试人员及智能音箱、会议系统等音频产品研发团队,系统梳理麦克风阵列从研发设计到整机验收的音频检查方法与评测标准,帮助解决通道一致性、失真、信噪比等质量把控问题。资源包内含1个docx文件&#xff0c…

作者头像 李华
网站建设 2026/10/16 19:08:34

AI时代个人量化策略开发:从回测到实盘的完整指南

1. 为什么"个人做量化"这件事在AI时代突然变得可行了三年前如果有人跟我说"你一个人也能搞出一套能跑的量化策略",我大概率会笑笑不说话。那时候的量化圈子是什么状态?一个像样的策略团队至少要有数据工程师、因子研究员、回测平台开…

作者头像 李华
网站建设 2026/10/16 19:08:34

带约束最优化:从KKT条件到工程实践,手把手教你求解

1. 带约束最优化到底在解决什么问题1.1 从无约束到带约束:一个自然的跨越做过无约束最优化的人都知道,梯度下降、牛顿法那一套玩得挺顺手——目标函数对参数求导,令导数为零,迭代往下降方向走就完事了。但现实世界从来不给你这种自…

作者头像 李华