在 python 中调整 ElasticNet 参数 sklearn 包

Posted

技术标签:

【中文标题】在 python 中调整 ElasticNet 参数 sklearn 包【英文标题】:tuning ElasticNet parameters sklearn package in python 【发布时间】:2018-02-13 13:45:31 【问题描述】:

我正在尝试使用 GridSearchCV 从 sklearn 包中实现 ElasticNet。 我的数据都是数字! 我有一个错误,我不明白是什么问题。 在尝试实现线性回归和套索时,这不是问题。 有人可以帮忙吗?

代码:

from sklearn.linear_model import ElasticNet
from sklearn.model_selection import GridSearchCV

# Use grid search to tune the parameters:

    parametersGrid = "max_iter": [1, 5, 10],
                      "alpha": [0.0001, 0.001, 0.01, 0.1, 1, 10, 100],
                      "l1_ratio": np.arange(0.0, 1.0, 0.1)

    eNet = ElasticNet()
    grid = GridSearchCV(eNet, parametersGrid, scoring='accuracy', cv=10)
    grid.fit(X_train, Y_train)
    Y_pred = grid.predict(X_test)

错误:

File "C:\Users\..\Anaconda2\lib\site-packages\sklearn\utils\validation.py", line 58, in _assert_all_finite
    " or a value too large for %r." % X.dtype)
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

【问题讨论】:

你确定你的数据都是数字并且在float64的范围内吗?您是否对 Lasso 和 LinearRegressor 使用相同的 X_trainy_train scoring='accuracy' 对于回归问题来说有点奇怪。此评分应用于分类问题。 @Vivek Kumar,同样的训练和测试。数据是数字。如何确保它在 float64 的范围内? @Miriam Farber 你是对的!将其更改为:neg_mean_absolute_error。得到同样的错误。 您在 Lasso 或 LinearRegressor 中没有收到任何错误吗?请发布错误的完整堆栈跟踪以及一些数据。 np.isfinite(X_train).all()np.isfinite(y_train).all() 返回什么? 【参考方案1】:

将分类的准确率改为r2进行回归:

grid = GridSearchCV(eNet, parametersGrid, scoring='r2', cv=10)

并从数据中删除 nan 等值

indx = ~np.isnan(x).any(axis=1)
X_train = X_train[indx]
Y_train = Y_train[indx]

这是我在代码和错误堆栈中看到的两个直接问题

【讨论】:

以上是关于在 python 中调整 ElasticNet 参数 sklearn 包的主要内容,如果未能解决你的问题,请参考以下文章

Lasso_ElasticNet_PolynomialFeatures算法介绍---人工智能工作笔记0032

如何在 sklearn ElasticNet 中设置“n_jobs”

R语言构建ElasticNet回归模型实战:基于mtcars数据集

Tensorflow超参调整时对于模型重加载轻量化的测试

R语言glmnet交叉验证选择(alphalambda)拟合最优elastic回归模型:弹性网络(elasticNet)模型选择最优的alpha值模型最优的lambda值,最终模型的拟合与评估

关于python中几个函数的用法