我正在尝试使用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.1
,0.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/