我正在尝试使用scikit-learn Randomized Logistic Regression特征选择方法,但是我一直遇到这种情况,即它在拟合时会杀死所有特征并返回:

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或正则化参数越低)-我的机器花费的时间越多。再加上我通常在RLR之前通过带有StandardScaler的管道运行RLR,然后在之后使用SVM或RF来运行RLR,并且还使用交叉验证,这使得在我的机器上运行所需的总时间呈指数增长。

最佳答案

没有代码,很难找出问题所在,原因是我认为错误与您的C值无关。但是要回答该问题,您将需要GridSearchCV

此处的示例足以使您入门:

>>> from sklearn import svm, grid_search, datasets
>>> iris = datasets.load_iris()
>>> parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
>>> svr = svm.SVC()
>>> clf = grid_search.GridSearchCV(svr, parameters)
>>> clf.fit(iris.data, iris.target)
...
GridSearchCV(cv=None, error_score=...,
       estimator=SVC(C=1.0, cache_size=..., class_weight=..., coef0=...,
                     decision_function_shape=None, degree=..., gamma=...,
                     kernel='rbf', max_iter=-1, probability=False,
                     random_state=None, shrinking=True, tol=...,
                     verbose=False),
       fit_params={}, iid=..., n_jobs=1,
       param_grid=..., pre_dispatch=..., refit=...,
       scoring=..., verbose=...)


您始终可以通过在cv变量中指定cross-validation来使它更进一步。另外,如果您的数据很大,请不要忘记更改n_jobs,这非常有帮助。

现在,我认为它不是C值的原因,而是与您将数据提供给回归的方式更多相关。同样,如果没有代码,很难清楚地看到它。

关于python - 如何在scikit-learn中使用随机对数回归找到最低的正则化参数(C)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33810051/

10-12 14:03