为什么 ElasticNet 的性能比 Lasso 和 Ridge 都差?

数据挖掘 机器学习 scikit-学习 线性回归
2022-02-20 13:39:50

我正在使用以下代码在同一数据集上构建一些模型:

X_train, X_test, y_train, y_test = train_test_split(X_in, y, test_size=0.25, random_state=42)

# Lasso regression
lasso = linear_model.Lasso()
lasso.fit(X_train, y_train)
pred_lasso = lasso.predict(X_test)

# Ridge regression
ridge = linear_model.Ridge()
ridge.fit(X_train, y_train)
pred_ridge = ridge.predict(X_test)

# ElasticNet
elastic = linear_model.ElasticNet()
elastic.fit(X_train, y_train)
pred_elastic = elastic.predict(X_test)

# R^2 Evaluation
print('R^2 for Lasso', r2_score(y_test, pred_lasso))
print('R^2 for Ridge', r2_score(y_test, pred_ridge))
print('R^2 for ElasticNet', r2_score(y_test, pred_elastic))
print('\n')

r2_score3 款车型分别为

R^2 for Lasso 0.28
R^2 for Ridge 0.14
R^2 for ElasticNet 0.02

这让我很困惑...... ElasticNet 结果不应该介于 Lasso 和 Ridge 之间吗?为什么 ElasticNet 结果实际上比其他两个差?谢谢!

1个回答

ElasticNet 模型进行调整。默认情况下,在 scikit-learn 中,ElasticNet 的l1_ratio参数,L1 和 L2 惩罚的混合,设置为 0.5。A .5l1_ratio表示 L1 和 L2 惩罚的均匀混合,不能很好地拟合数据。最佳实践是交叉验证网格搜索 的最佳值l1_ratio