常用线性回归模型

多元线性回归

多元线性回归是最常用的预测数值型目标的建模方法,也常用于数据分析中的多因素分析。

\[ \min_w||Xw-y||_2^2 \]

后面几种回归都是在它基础上稍做修改。当特征数多于实例数,某些数据有问题,或者某些特征相关性高时,线性回归得到的参数常常数值很大,常用 Lasso 回归和 Ridge 回归解决这一问题,防止模型过拟合。

lasso 回归(套索回归)

lasso 回归倾向于减少有效参数,使模型更加简单。具体方法是修改损失函数,将 L1 范数(各个元素绝对值之和)加入惩罚项,它可生成稀疏的模型参数。常用于特征存在共线性的情况,实现模型特征选择。

\[ \min_w\frac{1}{2n_{samples}}||Xw-y||_2^2+\alpha||w||_1 \] ### Ridge 回归(岭回归)

和 Lasso 回归类似,将 L2 范数(向量所有元素的平方和的开平方)加入惩罚项。常用于数据个数小于数据维度的情况,它限制参数大小,使之逼近 0。

\[ \min_w||Xw-y||_2^2+\alpha||w||_2^2 \] ### Huber 回归

Huber 的损失函数结合了 mse 和 mae,当模型的预测结果和真实值的差异较小时使用 mse,较大时则使用 mae,具体阈值通过人工设定。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression as LR,Ridge,HuberRegressor,LassoCV
from sklearn.metrics import mean_squared_error

lb = load_boston()
x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25, random_state=666)

#model = HuberRegressor().fit(x_train, y_train)
#model = Ridge().fit(x_train, y_train)
#model = LR().fit(x_train, y_train)
model = LassoCV().fit(x_train, y_train)
preds = model.predict(x_test)

print(model.coef_) # 打印回归参数
print(mean_squared_error(y_test, preds))