上一个学习了Lasso和Ridge,scikit-learn还提供了ElasticNet类,结合了Lasso和Ridge的惩罚项。在实践中,这种结合的效果最好,不过代价是要调节两个参数:一个用于L1正则化,一个用于L2正则化。
http://t.csdn.cn/j3MDyhttp://t.csdn.cn/j3MDy
from sklearn.linear_model import ElasticNet
el = ElasticNet(alpha=0.01).fit(X_train, y_train)
print("Training set score: {:.2f}".format(el.score(X_train, y_train)))
print("Test set score: {:.2f}".format(el.score(X_test, y_test)))
from sklearn.linear_model import ElasticNet
el01 = ElasticNet(alpha=1).fit(X_train, y_train)
print("Training set score: {:.2f}".format(el01.score(X_train, y_train)))
print("Test set score: {:.2f}".format(el01.score(X_test, y_test)))
from sklearn.linear_model import ElasticNet
el10 = ElasticNet(alpha=10).fit(X_train, y_train)
print("Training set score: {:.2f}".format(el10.score(X_train, y_train)))
print("Test set score: {:.2f}".format(el10.score(X_test, y_test)))
plt.plot(lasso.coef_, 's', label="Lasso alpha=1")
plt.plot(lasso001.coef_, '^', label="Lasso alpha=0.01")
plt.plot(lasso00001.coef_, 'v', label="Lasso alpha=0.0001")
plt.plot(el10.coef_,'v',label="ElasticNet alpha=10")
plt.plot(el01.coef_,'v',label="ElasticNet alpha=1")
plt.plot(el.coef_,'v',labe