如何使用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

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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