使用Lasso惩罚的线性回归需要增加迭代次数,Scikit-learn

时间:2014-02-20 18:33:51

标签: python machine-learning scikit-learn linear-regression

我正在使用Scikit-learn包中实现的Lasso进行线性回归。

linear_regress = linear_model.Lasso(alpha = 2)
linear_regress.fit(X, Y)

对于X,有7827个示例和758个功能。 但是我收到了一个警告:

Objective did not converge for target 0, you might want to increase the number of iterations ' to increase the number of iterations')

同时,交叉验证的MAE为0.00304247702091

然后,我遵循它的建议来增加迭代次数。 (我假设我做得正确):

linear_regress = linear_model.Lasso(alpha = 2, max_iter = 100000, tol = 1e-20)

但警告仍然存在且MAE增加到0.0191056040626,这更糟糕。

所以有人知道如何解决这个问题吗?

顺便说一句,对于交叉验证的结果,训练数据的MAE远小于测试数据的MAE,例如(alpha = 2):

The MAE on the TRAINING data is 6.3462754706e-14
The MAE on the TEST data is 0.238521024414

我认为过度拟合存在。但增加alpha并没有多大帮助,例如(alpha = 5)

The MAE on the TRAINING data is 1.29613883816e-13
The MAE on the TEST data is 0.0677816327262

增加alpha也会使平均MAE增加。

提前致谢!

2 个答案:

答案 0 :(得分:3)

我想'not converge'上的警告可能是由于不合适,但您需要验证(可能不需要将tol值设置得太小)。我建议您在拟合中迭代alpha2^(-5)2^3,并绘制学习曲线以观察训练和测试数据的性能(交叉验证),并选择最佳正则化参数,以最好地避免欠拟合和过拟合。

答案 1 :(得分:0)

您可以在Scikit-Learn中查看GridSearchCV哪个正在为您调整参数。使用此功能,您可以找到模型的最佳参数,使用这些参数可以提高模型的分数。

Click查看scikit-learn上的GridSearchCV页面。