1、导入工具包
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
from sklearn import linear_model
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
2、读取数据
数据源还是共享单车的数据。共731个样本,每个样本有35列。
#pd.set_option('display.max_colwidth',1000)
#导入特征工程处理之后的数据
data=pd.read_csv('FE_bikesharing_train.csv')
#print(data.shape)
y=data['cnt']
X=data.drop('cnt',axis=1)
3、数据的分割
其中80%用于训练,20%用于测试
#数据的分割 80%用于训练 20%用于测试
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)
#print(X_train.shape)
#print(X_test.shape)
#print(y_train.shape)
#print(y_test.shape)
4、训练三种模型的数据
#线性模型
lm=linear_model.LinearRegression()
#岭回归模型
#岭回归系数越大,原始系数被压缩的越严重;越小越趋向于线性回归模型的系数
ridge=Ridge(alpha=10)
#Lasso模型,惩罚数据越大,原始系数的作用就越小;城府数据越小,原始数据的作用就越大
lasso=Lasso(alpha=10)
#训练三种模型数据
reg1=lm.fit(X_train,y_train)
reg2=ridge.fit(X_train,y_train)
reg3=lasso.fit(X=X_train,y=y_train)
5、得到三种模型对应的预测值
顺便拿取了r2分数
#获得三种模型的预测值
lm_pred=lm.predict(X_test)
ridge_pred=ridge.predict(X_test)
lasso_pred=lasso.predict(X_test)
#r2分数
lm_r2=r2_score(y_test,lm_pred)
ridge_r2=r2_score(y_test,ridge_pred)
lasso_r2=r2_score(y_test,lasso_pred)
print('lm_r2',lm_r2)
print('ridge_r2',ridge_r2)
print('lasso_r2',lasso_r2)
输出为:
lm_r2 0.8435589442822488
ridge_r2 0.8296503329586667
lasso_r2 0.8339856832485875
6、对三种模型的系数做对比
#画出参数
plt.figure(figsize=(12,8))
#线性回归
#plt.subplot(221)
plt.plot(reg1.coef_,color='lightgreen',lw=2,label='lr coefficients')
plt.legend()
#岭回归
#plt.subplot(222)
plt.plot(reg2.coef_,color='red',lw=2,label='Ridge coefficients')
plt.legend()
#lasso回归
#plt.subplot(223)
plt.plot(reg3.coef_,color='gold',lw=2,label='Lasso coefficients')
plt.legend()
plt.show()
对比图: