一,带有L2正则化的线性回归-岭回归
岭回归,其实也是一种线性回归。只不过在算法建立回归方程时候,加上正则化的限制,从而达到解决过拟合的效果。
二,API
- sklearn.linear_model.Ridge(alpha=1.0)
- 具有l2正则化的线性回归
- alpha:正则化力度,也叫 λ
- λ取值:0~1 1~10
- coef_:回归系数
- sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
- 具有l2正则化的线性回归,可以进行交叉验证
- coef_:回归系数
class _BaseRidgeCV(LinearModel):
def __init__(self, alphas=(0.1, 1.0, 10.0),
fit_intercept=True, normalize=False, scoring=None,
cv=None, gcv_mode=None,
store_cv_values=False):
三,正则化对于权重参数的影响
- 正则化力度越大,权重系数会越小
- 正则化力度越小,权重系数会越大
四,波士顿房价预测实例
rd = Ridge(alpha=1.0)
rd.fit(x_train, y_train)
print("岭回归的权重参数为:", rd.coef_)
y_rd_predict = std_y.inverse_transform(rd.predict(x_test))
print("岭回归的预测的结果为:", y_rd_predict)
print("岭回归的均方误差为:", mean_squared_error(y_test, y_rd_predict))
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import Ridge
def mylinearregression():
"""线性回归预测房子价格"""
lb = load_boston()
# print(lb.data)
# print(lb.target)
# # 对数据集进行划分
x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.3, random_state=24)
# 需要做标准化处理对于特征值处理
std = StandardScaler()
# 需要做标准化处理对于特征值处理
x_train = std.fit_transform(x_train)
x_test = std.fit_transform(x_test)
# 1,使用线性模型进行预测 ---正规方程求解
lr = LinearRegression(fit_intercept=True)
# fit之后已经得出参数结果
lr.fit(x_train, y_train)
print("正规方程计算出的权重:",lr.coef_)
print("正规方程计算出的偏置:", lr.intercept_)
# 使用predict来预测测试集结果
y_lr_predict = lr.predict(x_test)
print("正规方程预测的结果为:", y_lr_predict)
# 调用均方误差去评估LinearRegression的结果误差如何
error = mean_squared_error(y_test,y_lr_predict)
print("正规方程的均方误差为:", error)
# 2,使用线性模型进行预测 ---梯度下降进行预测
# sgd = SGDRegressor(loss="squared_loss",fit_intercept=True,learning_rate="invscaling")
sgd = SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate="constant", eta0=0.001)
# 使用fit训练梯度下降模型
sgd.fit(x_train, y_train)
print("梯度下降计算出的权重:",sgd.coef_)
print("梯度下降计算出的偏置:", sgd.intercept_)
# 使用predict来预测测试集结果
y_sgd_predict = sgd.predict(x_test)
print("梯度下降预测的结果为:", y_sgd_predict)
# 调用均方误差去评估SGDRegressor的结果误差如何
sgd_error = mean_squared_error(y_test,y_sgd_predict)
print("梯度下降的均方误差为:", sgd_error)
# 3,使用线性模型进行预测 ---L2正则化(岭回归)进行预测
rd = Ridge(alpha=1.0)
# 使用fit训练岭回归模型
rd.fit(x_test,y_test)
print("岭回归计算出的权重:",rd.coef_)
print("岭回归计算出的偏置:", rd.intercept_)
# 使用predict来预测测试集结果
y_rd_predict = rd.predict(x_test)
print("岭回归预测的结果为:", y_rd_predict)
# 调用均方误差去评估SGDRegressor的结果误差如何
rd_error = mean_squared_error(y_test,y_rd_predict)
print("岭回归的均方误差为:", rd_error)
return None
if __name__ == "__main__":
mylinearregression()