使用Sklearn实现Ridge,LASSO和ElasticNet
导入模块
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
加载数据的函数
def loaddata(txt_path):
data = np.loadtxt(txt_path,delimiter=',')
n = data.shape[1]-1 # 特征数
X = data[:, 0:n]
y = data[:, -1].reshape(-1,1)
return X,y
X,y = loaddata('data/data1.txt')
1.线性回归(最小二乘实现)
# linear_model中的LinearRegression()方法可以实现线性回归
model1 = linear_model.LinearRegresstion()
# fit()方法可以加载训练数据并进行训练
model1.fit(X,y)
intercept_属性可以输出 θ 0 \theta_0 θ0 的值,coef_属性可以输出 θ 1 ~ θ n \theta_1 ~ \theta_n θ1~θn 的值
# 输出系数
print(model1.coef_)
# 输出截距
print(model1.intercept_)
画图
plt.scatter(X,y)
y_hat = model1.predict(X)
plt.plot(X,y_hat)
2.Ridge
linear_model中的Ridge方法可以实现Ridge回归
注:这里的
α
\alpha
α表示正则化强度 相当于
λ
\lambda
λ
normalize设置为True表示对训练数据进行标准化
model2 = linear_model.Ridge(alpha=0.01,normalize=True)
model2.fit(X,y)
print(model2.coef_)
print(model2.intercept_)
plt.scatter(X,y)
y_hat = model2.predict(X)
plt.plot(X,y_hat)
3.LASSO
linear_model中的Lasso()方法可以实现Lasso回归
注:这里的
α
\alpha
α表示正则化强度 相当于
λ
\lambda
λ
normalize设置为True表示对训练数据进行标准化
model3 = linear_model.Lasso(alpha=0.01,normalize=True)
model3.fit(X,y)
print(model3.coef_)
print(model3.intercept_)
plt.scatter(X,y)
y_hat = model3.predict(X)
plt.plot(X,y_hat)
4.ElasticNet
linear_model中的ElasticNet()方法可以实现弹性网回归
注:这里的
α
\alpha
α表示正则化强度 相当于
λ
\lambda
λ
normalize设置为True表示对训练数据进行标准化
model4 = linear_model.ElasticNet(alpha=0.01,normalize=True)
model4.fit(X,y)
print(model4.coef_)
print(model4.intercept_)
plt.scatter(X,y)
y_hat = model4.predict(X)
plt.plot(X,y_hat)