2015-12-25 36 views
3

我正在使用sklearn随机回归,如Randomized Logistic Regression。由于随机Logistic回归使用L1惩罚,因此需要设置正则化参数C(或Lasso中的alpha)。sklearn随机回归的正则化参数设置

为了找到C的好价值,我通常使用如下所示的简单GridSearchCV。

但RandomizedLogisticRegression()不支持GridSearchCV,因为它包含引导。相反,我尝试在GridSearchCV中使用典型的LogisticRegression。

params = {'C':[0.1, 1, 10]} 
logi = LogisticRegression(penalty='l1') 
clf = GridSearchCV(logi, params, cv=10) 

我可以通过这种方式得到C,但是,当我将此C值,以随机回归没有选择属性。也许由GridSearchCV选定的C很低。

所以,我想知道在使用随机化回归时是否有其他好方法来确定C(或alpha)的公平值。

之前有一个similar question,但我认为答案是典型的回归。

任何人都可以给我一个想法吗?

+0

交叉验证如何? – Riyaz

+0

不幸的是,使用LogisticRegressionCV()产生与GridSearchCV()类似的结果。最好的C值太小了,每个特征的系数都是0. – ToBeSpecific

回答

3

因为RandomizedLogisticRegression用于特征选择,所以需要将它作为流水线的一部分进行交叉验证。您可以将GridSearchCV应用于Pipeline,其中包含它作为功能选择步骤以及您选择的分类器。示例可能如下所示:

pipeline = Pipeline([ 
    ('fs', RandomizedLogisticRegression()), 
    ('clf', LogisticRegression()) 
]) 

params = {'fs__C':[0.1, 1, 10]} 

grid_search = GridSearchCV(pipeline, params) 
+0

再次感谢您的建议!我没有想到管道,但它似乎是一个不错的主意。通过这种方法,我可以使用其他种类的分类器来代替L1-Logistic回归。我会试试这个。 – ToBeSpecific

+0

我可以再问一个问题吗?如果类别标签是平衡的,我可以使用准确性作为分类器的评分方法。但如果它有偏差(约100:20),哪种方法会更好?我正在使用roc_auc,但我认为这还不够,并且它不能与LOOCV结合使用。有没有其他评分方法可以推荐? – ToBeSpecific

+1

通常,总体评分取决于应用程序。如果概率的排名是有意义的,ROC AUC是好的。如果您更关心概率是一个很好的可能性估计值,则对数损失很有用。对于k倍数或留下一个交叉验证,您可以交叉预测整个数据集,然后应用AUC ROC。 –