1.岭回归
今天看了会L2正则化,大致的意思就是在惩戒函数中加入高次项的惩戒项,用来减小线性回归中高次项的系数,避免过拟合的状态。这样就产生了一种具有正则化的线性回归模型------岭回归。
2.岭回归在sklearn中的api
sklearn
.linear_model
.Ridge
(alpha
=1.0)
from sklearn
.linear_model
import Ridge
3.岭回归模型案例
ri
= Ridge
(alpha
=1.0)
ri
.fit
(x_train
, y_train
)
print("特征值", ri
.coef_
)
ri_y_predict
= std_y
.inverse_transform
(ri
.predict
(x_test
))
print("梯度下降每个房子的预测价格:", ri_y_predict
)
print("正规方程均方误差:", mean_squared_error
(std_y
.inverse_transform
(y_test
), y_predict
))
print("梯度下降均方误差:", mean_squared_error
(std_y
.inverse_transform
(y_test
), SGD_y_predict
))
print("岭回归误差:", mean_squared_error
(std_y
.inverse_transform
(y_test
), ri_y_predict
))
结果如下:(看着结果确实是好一点)
最后附上全部代码:正规方程,梯度下降和岭回归模型
from sklearn
.datasets
import load_boston
from sklearn
.linear_model
import LinearRegression
,SGDRegressor
from sklearn
.linear_model
import Ridge
from sklearn
.model_selection
import train_test_split
from sklearn
.preprocessing
import StandardScaler
from sklearn
.metrics
import mean_squared_error
def regress():
lb
= load_boston
()
x_train
, x_test
, y_train
, y_test
= train_test_split
(lb
.data
, lb
.target
, test_size
=0.25)
std_x
= StandardScaler
()
x_train
= std_x
.fit_transform
(x_train
)
x_test
= std_x
.transform
(x_test
)
std_y
= StandardScaler
()
y_train
= std_y
.fit_transform
(y_train
.reshape
(-1,1))
y_test
= std_y
.transform
(y_test
.reshape
(-1,1))
lr
= LinearRegression
()
lr
.fit
(x_train
, y_train
)
print("特征值:",lr
.coef_
)
y_predict
= std_y
.inverse_transform
(lr
.predict
(x_test
))
print("正规方程求解每个房子的预测价格:",y_predict
)
SGD
=SGDRegressor
()
SGD
.fit
(x_train
, y_train
)
print("特征值",SGD
.coef_
)
SGD_y_predict
= std_y
.inverse_transform
(SGD
.predict
(x_test
))
print("梯度下降每个房子的预测价格:", SGD_y_predict
)
ri
= Ridge
(alpha
=1.0)
ri
.fit
(x_train
, y_train
)
print("特征值", ri
.coef_
)
ri_y_predict
= std_y
.inverse_transform
(ri
.predict
(x_test
))
print("梯度下降每个房子的预测价格:", ri_y_predict
)
print("正规方程均方误差:", mean_squared_error
(std_y
.inverse_transform
(y_test
), y_predict
))
print("梯度下降均方误差:", mean_squared_error
(std_y
.inverse_transform
(y_test
), SGD_y_predict
))
print("岭回归误差:", mean_squared_error
(std_y
.inverse_transform
(y_test
), ri_y_predict
))
return None
if __name__
== "__main__":
regress
()
转载请注明原文地址:https://blackberry.8miu.com/read-27265.html