如何使用scikit-learn中的随机逻辑回归找到最低的正则化参数(C)?

我试图使用scikit-learn的随机逻辑回归特征选择方法,但在拟合过程中经常遇到所有特征都被删除的情况,并返回以下错误:

ValueError: Found array with 0 feature(s) (shape=(777, 0)) while a minimum of 1 is required.

显然,这是预料之中的,因为我将正则化参数C降低到了极低的水平(请注意,这是数学正则化参数lambda的倒数,即C = 1/lambda,因此C越低,正则化越极端)。

我的问题是,如何在不手动测试多个值并排除那些引发此错误的值的情况下,提前找到我可以选择的最低C值?

在我的案例中(开始时有大约250个特征),我知道C = 0.5是我能达到的最低值。0.10.4甚至0.49都会引发错误,因为它们将我的特征集减少到0(并给出我上面粘贴的shape = (blah, 0)错误)。

另外一点(或许这应该是一个不同的问题)——我的C值越高(也就是我的lambda或正则化参数越低),我的机器拟合所需的时间就越长。再加上我通常通过一个包含StandardScaler的管道运行RLR,然后是RLR之后的SVM或RF,并且还使用交叉验证,这使得我在机器上运行所需的总时间呈指数级增长。


回答:

正如我在对Leb的回答的评论中提到的,正确答案是这取决于数据。目前,sklearn.pipeline.Pipelinesklearn.grid_search.GridSearchCV无法捕捉到这种特定情况。如果正则化参数足够严格,以至于删除了输入数据集中的所有特征,并且没有剩余的训练数据,那么当GridSearchCV在搜索最优参数时,Pipeline中的后续分类器将(显然)失败。

在我的案例中,我通过在将任何形式的特征选择添加到Pipeline之前,彻底了解和探索我的数据来处理这种情况。

作为一个使用示例,我将特征选择转换器移出Pipeline,并在不同的值集上手动拟合它。我特别关注极端情况(非常高的正则化和非常低的正则化)。这让我了解到特征选择转换器何时会删除所有特征,以及何时完全不进行特征选择。然后,我将我的特征选择转换器重新添加到Pipeline中,并将其放入GridSearchCV。在这里,我确保为特征选择转换器搜索的参数处于我之前发现的两个极端之间的舒适范围内——这可以防止我的GridSearchCV遇到零特征情况并崩溃。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注