线性回归模型、岭回归、Lasso对数据的训练与测试

2019-04-14 17:12发布

 

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() 对比图: