跳到主要内容

普通最小二乘法

线性模型旨在将目标值预测为输入特征的线性组合。通常表示为:

y^=w0+w1x1++wpxp\hat{y} = w_0 + w_1 x_1 + \dots + w_p x_p

其中 y^\hat{y} 是预测值,w0w_0 是截距,w1,,wpw_1, \dots, w_p 是系数。

普通最小二乘法

  • 目标:最小化观测目标与预测值之间的残差平方和。
  • 方法:拟合一个线性模型以最小化成本函数 yXw2\|y - Xw\|^2
  • 复杂度:使用奇异值分解计算;如果 n>pn > p,则为 O(n2p)O (n^2p)
from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
print(reg.coef_)

非负最小二乘法

  • 约束系数为非负。适用于表示价格等数量的变量。

OLS的复杂度

  • 使用SVD计算,成本取决于矩阵维度。

岭回归

  • 目标:通过对系数大小施加惩罚来解决多重共线性问题。
  • 方法:最小化 yXw2+αw2\|y - Xw\|^2 + \alpha \|w\|^2,其中 α\alpha 是一个复杂度参数。
  • 求解器选择:根据条件(例如,数据稀疏性)自动选择。
from sklearn import linear_model
reg = linear_model.Ridge(alpha=.5)
reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
print(reg.coef_)
print(reg.intercept_)

岭分类

  • 通过转换目标并应用岭回归公式来处理二元分类。

Lasso

  • 目标:估计稀疏系数,有效减少特征数量。
  • 方法:最小化 yXw2+αw1\|y - Xw\|^2 + \alpha \|w\|_1
  • 用途:在压缩感知领域很重要。
  • 特征选择:由于解的稀疏性,可用于特征选择。
from sklearn import linear_model
reg = linear_model.Lasso(alpha=0.1)
reg.fit([[0, 0], [1, 1]], [0, 1])
print(reg.predict([[1, 1]]))

多任务Lasso

  • 目标:联合估计多个回归问题的稀疏系数。
  • 特异性:所有回归任务选择相同的特征。

弹性网络

  • 目标:结合岭回归和Lasso的惩罚项,在多个特征相关时非常有用。
  • 方法:最小化 yXw2+αρw1+α(1ρ)2w2\|y - Xw\|^2 + \alpha \rho \|w\|_1 + \frac{\alpha (1 - \rho)}{2} \|w\|^2

多任务弹性网络

  • 目标:类似于多任务Lasso,但使用弹性网络惩罚项。
  • 用途:适用于任务共享相同稀疏特征的情况。

最小角回归 (LARS)

  • 目标:高效计算系数的完整路径。
  • 方法:类似于前向逐步回归,调整方向以使其与所有与残差最相关的变量保持等角。

正交匹配追踪 (OMP)

  • 目标:在非零系数数量的约束下,近似最佳拟合。
  • 方法:选择与残差最相关的特征的贪婪算法。

贝叶斯回归

  • 目标:通过先验分布引入正则化。
  • 类型
    • 贝叶斯岭回归:正则化参数从数据中估计。
    • 自动相关性确定 (ARD):类似于贝叶斯岭回归,但促进稀疏性。
from sklearn import linear_model
X = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]]
Y = [0., 1., 2., 3.]
reg = linear_model.BayesianRidge()
reg.fit(X, Y)
print(reg.predict([[1, 0.]]))
print(reg.coef_)

逻辑回归

  • 目标:用于分类的线性模型(尽管有其名称)。
  • 方法:使用逻辑函数对默认类别的概率进行建模。
  • 正则化:L1、L2和弹性网络可用于惩罚模型复杂度。

广义线性模型 (GLM)

  • 扩展:允许使用指数族中不同的分布进行预测。
  • 功能:通过链接函数建模关系,并将模型族扩展到正态分布误差之外。

分位数回归

  • 目标:估计中位数或其他分位数,而非均值。
  • 方法:最小化弹子损失(pinball loss),在预测区间时很有用。

多项式回归

  • 目标:使用多项式基函数扩展线性模型。
  • 用途:可以在线性框架内建模非线性关系。

多项式特征变换

from sklearn.preprocessing import PolynomialFeatures
import numpy as np
X = np.arange(6).reshape(3, 2)
poly = PolynomialFeatures(degree=2)
print(poly.fit_transform(X))

多项式回归管道

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
import numpy as np
model = Pipeline([
('poly', PolynomialFeatures(degree=3)),
('linear', LinearRegression(fit_intercept=False))
])
x = np.arange(5)
y = 3 - 2 * x + x ** 2 - x ** 3
model.fit(x[:, np.newaxis], y)
print(model.named_steps['linear'].coef_)

参考资料和有用链接