Lasso回归:
#-*- encoding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import r2_score np.random.seed(42) n_samples,n_features=50,200 X=np.random.randn(n_samples,n_features) coef=3*np.random.randn(n_features) inds=np.arange(n_features) np.random.shuffle(inds) coef[inds[10:]]=0 y=np.dot(X,coef) ##添加噪音: y+=0.01*np.random.normal((n_samples,)) ####分离数据: n_samples=X.shape[0] X_train,y_train=X[:int(n_samples/2)],y[:int(n_samples/2)] X_test,y_test=X[int(n_samples/2):],y[int(n_samples/2):] ###Lasso from sklearn.linear_model import Lasso alpha=0.1 lasso=Lasso(alpha=alpha) y_pred_lasso=lasso.fit(X_train,y_train).predict(X_test) r2_score_lasso=r2_score(y_test,y_pred_lasso) print(lasso) print('r^2 on test data:%f' %r2_score_lasso) from sklearn.linear_model import ElasticNet enet=ElasticNet(alpha=alpha,l1_ratio=0.7) y_pred_enet=enet.fit(X_train,y_train).predict(X_test) r2_score_enet=r2_score(y_test,y_pred_enet) print(enet) print('r^2 on test data:%f' %r2_score_enet) plt.plot(enet.coef_,label='Elastic net coefficients') plt.plot(lasso.coef_,label='Lasso coefficients') plt.plot(coef,'--',label='orginal coefficients' ) plt.legend(loc='best') plt.title('Lasso R^2:%f,Elastic Net R^2:%f' %(r2_score_lasso,r2_score_enet)) plt.show()
输出:
Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000, normalize=False, positive=False, precompute=False, random_state=None, selection='cyclic', tol=0.0001, warm_start=False) r^2 on test data:0.384710 ElasticNet(alpha=0.1, copy_X=True, fit_intercept=True, l1_ratio=0.7, max_iter=1000, normalize=False, positive=False, precompute=False, random_state=None, selection='cyclic', tol=0.0001, warm_start=False) r^2 on test data:0.240176