【问题标题】:Regularization parameter setting for Randomized Regression in sklearnsklearn中随机回归的正则化参数设置
【发布时间】:2016-03-31 13:11:25
【问题描述】:

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

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

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

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

我可以通过这种方式得到 C,但是,当我将此 C 值应用于随机逻辑回归时,没有选择任何属性。可能是 GridSearchCV 选中的 C 比较低。

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

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

谁能给我一个建议?

【问题讨论】:

  • 交叉验证呢?
  • 不幸的是,使用 LogisticRegressionCV() 产生的结果与 GridSearchCV() 相似。最佳C值太小,每个特征的系数都为0。

标签: python machine-learning scikit-learn regression


【解决方案1】:

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

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

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

grid_search = GridSearchCV(pipeline, params)

【讨论】:

  • 再次感谢您的建议!我没有想到管道,但这似乎是一个好主意。使用这种方法,我可以使用其他类型的分类器来代替 L1-Logistic 回归。我会试试这个。
  • 我可以再问一个问题吗?如果类标签是平衡的,我可以使用准确率作为分类器的评分方法。但是如果有偏差(大约 100:20),哪种方法会更好?我用的是roc_auc,但是觉得不够用,不能和LOOCV结合。还有其他评分方法推荐吗?
  • 通常总分取决于应用程序。如果概率的排序是有意义的,那么 ROC AUC 就很好。如果您更关心概率是一个很好的似然估计值,那么对数丢失很有用。在 k 折或遗漏交叉验证方面,您可能会交叉预测整个数据集,然后再应用 AUC ROC。
  • 非常感谢大卫。你的建议对我很有帮助。
  • 您可以尝试删除一些较低的 C 值。
猜你喜欢
  • 2020-09-23
  • 2023-03-14
  • 2021-12-25
  • 2016-02-21
  • 2020-03-12
  • 2016-03-30
  • 1970-01-01
  • 2012-08-24
  • 2023-04-04
相关资源
最近更新 更多