5.4.8套索回归分析波士顿房价数据
#对套索回归进行分析波士顿房价数据
def Lasso_for_for_boston(): myutil = util() X,y = datasets.load_boston().data,datasets.load_boston().target X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3) lr = LinearRegression().fit(X_train,y_train) print('线性回归,波士顿房价数据训练集得分: {:.2%}'.format(lr.score(X_train,y_train))) print('线性回归,波士顿房价数据测试集得分: {:.2%}'.format(lr.score(X_test,y_test))) title = "线性回归 波士顿房价病数据" myutil.plot_learning_curve(LinearRegression(),X,y,title) myutil.show_pic(title) ####################################################################### lasso = Lasso().fit(X_train,y_train) print('alpha=1,波士顿房价数据训练集得分: {:.2%}'.format(lasso.score(X_train,y_train))) print('alpha=1,波士顿房价数据测试集得分: {:.2%}'.format(lasso.score(X_test,y_test))) print('alpha=1,波士顿房价数据回归特征数: {}'.format(np.sum(lasso01.coef_!=0))) title = "Lasso 波士顿房价数据 alpha=1" myutil.plot_learning_curve(Lasso(),X,y,title) myutil.show_pic(title) ##################################################################### lasso10 = Lasso(alpha=10).fit(X_train,y_train) print('alpha=10,波士顿房价数据训练集得分: {:.2%}'.format(lasso10.score(X_train,y_train))) print('alpha=10,波士顿房价数据测试集得分: {:.2%}'.format(lasso10.score(X_test,y_test))) print('alpha=10,波士顿房价数据回归特征数: {}'.format(np.sum(lasso10.coef_!=0))) title = "Lasso 波士顿房价数据 alpha=10" myutil.plot_learning_curve(Lasso(alpha=10),X,y,title) myutil.show_pic(title) ####################################################################### lasso01 = Lasso(alpha=0.1).fit(X_train,y_train) print('alpha=0.1,波士顿房价数据训练集得分: {:.2%}'.format(lasso01.score(X_train,y_train))) print('alpha=0.1,波士顿房价数据测试集得分: {:.2%}'.format(lasso01.score(X_test,y_test))) print('alpha=0.1,波士顿房价数据回归特征数: {}'.format(np.sum(lasso01.coef_!=0))) title = "Lasso波士顿房价数据 alpha= 0.1" myutil.plot_learning_curve(Lasso(alpha=0.1),X,y,title) myutil.show_pic(title) ####################################################################### title = "Lasso 波士顿房价数据 数据分布比较" plt.plot(lasso01.coef_,'s',label='套索回归 alpha=1') plt.plot(lasso0110.coef_,'^',label='套索回归 alpha=10’) plt.plot(lasso01.coef_,'v',label='套索回归 alpha=0.1') plt.plot(lr.coef_,'o',label='线性回归 Regression') plt.xlabel(u'系数指数') plt.ylabel(u'系数大小') plt.hlines(0,0,len(lr.coef_)) myutil.show_pic(title)
输出
线性回归,波士顿房价数据训练集得分: 74.98% 线性回归,波士顿房价数据测试集得分: 70.81% alpha=1,波士顿房价数据训练集得分: 69.75% alpha=1,波士顿房价数据测试集得分: 62.49% alpha=1,波士顿房价数据回归特征数: 10 alpha=10,波士顿房价数据训练集得分: 54.76% alpha=10,波士顿房价数据测试集得分: 47.80% alpha=10,波士顿房价数据回归特征数: 4 alpha=0.1,波士顿房价数据训练集得分: 74.25% alpha=0.1,波士顿房价数据测试集得分: 67.98% alpha=0.1,波士顿房价数据回归特征数: 12
加载并返回波士顿房价数据集(回归)的维度:13
alpha |
波士顿训练集得分 |
波士顿测试集得分 |
特征数 |
线性 |
74.98% |
70.81% |
|
1 |
69.75% |
62.49% |
10 |
10 |
54.76% |
68.49% |
4 |
0.1 |
74.25% |
67.98% |
12 |
alpha =10 (^ 橘黄色上箭头)
alpha =1 (s 蓝色方块)
alpha = 0.1 (v 绿色下箭头)
线性:(o 红色圆点)
5.4.9比较岭回归与套索回归
#比较岭回归与套索回归 def Ridge_VS_Lasso(): myutil = util() X,y = datasets.load_diabetes().data,datasets.load_diabetes().target X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3) lasso = Lasso(alpha=1,max_iter=100000).fit(X_train,y_train) plt.plot(lasso.coef_,'s',label='lasso alpha=1') lasso01 = Lasso(alpha=0.1,max_iter=100000).fit(X_train,y_train) plt.plot(lasso01.coef_,'^',label='lasso alpha=0.1') lasso0001 = Lasso(alpha=0.0001,max_iter=100000).fit(X_train,y_train) plt.plot(lasso0001.coef_,'v',label='lasso alpha=0.001') ridge01 = Ridge(alpha=0.1).fit(X_train,y_train) plt.plot(ridge01.coef_,'o',label='ridge01 alpha=0.1') plt.legend(ncol=2,loc=(0,1.05)) plt.ylim(-1000,750) plt.legend(loc='lower right') title = "比较岭回归与套索回归" plt.xlabel(u"系数指数") plt.ylabel(u"系数大小") myutil.show_pic(title)
- alpha=1,大部分系数都在0附近。
- alpha=0.1,大部分系数都在0附近,但是比=1时少很多,有些不等于1。
- alpha=0.001,整个模型被正则化,大部分不等于0。
- alpha=0.1,岭回归与套索回归基本一致。
数据特征比较多,一小部分真正重要,用套索回归,否则用岭回归。