1、岭回归与线性回归的区别
岭回归(Ridge Regression)和线性回归(Linear Regression)都是用于回归分析的统计方法,但它们在处理方式和应用场景上有一些关键的区别:
a)基本概念
·线性回归:目标是找到一个线性函数,使得预测值与实际值之间的均方误差(MSE)最小。没有对系数的约束。
·岭回归:在最小化均方误差的同时,添加一个正则化项(L2范数),以防止过拟合。该正则化项是系数的平方和乘以一个正则化参数。
b)公式
·线性回归 : m i n w ∣ ∣ X w − y ∣ ∣ 2 min_w||Xw-y||^2 minw∣∣Xw−y∣∣2
·岭回归 : m i n w ∣ ∣ X w − y ∣ ∣ 2 + λ ∣ ∣ w ∣ ∣ 2 min_w||Xw-y||^2 +λ||w||² minw∣∣Xw−y∣∣2+λ∣∣w∣∣2
∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣表示 w w w的二范数,其中,𝜆是正则化参数,用于控制正则化项的权重。
c)正则化
·线性回归:没有正则化,对特征系数没有约束。
·岭回归:通过添加正则化项,迫使特征系数较小,从而减少模型复杂度,防止过拟合。
d)模型复杂度
·线性回归:当特征数量多或者特征之间高度相关时,模型可能会变得非常复杂,容易过拟合。
·岭回归:通过正则化,模型会更简洁,能够有效应对多重共线性问题,提高模型的泛化能力。
e)应用场景
·线性回归:适用于特征数量相对较少且没有多重共线性的问题。
·岭回归:适用于高维数据集和特征之间有相关性的情况,能够更好地处理共线性问题。
2、岭回归的API
在sklearn中,提供了Ridge方法,其各个参数如下:
alpha:正则化强度参数。默认为1.0。正则化参数越大,正则化强度越高,使得模型系数趋于零。需要调节该参数以找到最优值。
fit_intercept:是否计算截距。默认为True。如果数据已经中心化(例如,每个特征的均值为零),可以设置为False。
normalize:如果为True,在进行回归之前会先对数据进行归一化。默认为False。注意:在较新的版本中不推荐使用该参数,建议在数据预处理中进行归一化。
solver:用来计算岭回归的算法。可以是’auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’之一。默认是’auto’,会根据数据自动选择合适的算法。
max_iter:求解器收敛的最大迭代次数。默认是None,不限次数。对于sag和saga求解器,该参数是有用的。
tol:求解器的精度。默认是0.001。
random_state:用于随机数生成的种子。默认是None。
3、岭回归预测波士顿房价(数据集点我)
import pandas as pd
data = pd.read_csv('housing.csv',sep=',')
# 数据集的切分
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data[['RM','LSTAT','PTRATIO']],data.MEDV,train_size=0.8)
# 数据归一化
from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)
# 使用岭回归进行预测
from sklearn.metrics import mean_squared_error,r2_score
from sklearn.linear_model import Ridge
estimator = Ridge(fit_intercept=True,max_iter=1000)
estimator.fit(x_train, y_train)
y_predict2 = estimator.predict(x_test)
print(f"r方系数为{r2_score(y_predict2,y_test)}")
print(f"方差为:{mean_squared_error(y_predict2,y_test)}")
print(f'优化后的权重参数为:{estimator.coef_},偏置为:{estimator.intercept_}')