【问题标题】:How to set intercept_scaling in scikit-learn LogisticRegression如何在 scikit-learn LogisticRegression 中设置intercept_scaling
【发布时间】:2013-07-16 16:27:38
【问题描述】:

我正在使用 scikit-learn 的 LogisticRegression 对象进行正则化二进制分类。我已经阅读了intercept_scaling 上的文档,但我不明白如何明智地选择这个值。

数据集如下所示:

  • 10-20 个特征,300-500 个重复
  • 高度非高斯分布,实际上大多数观测值为零
  • 输出类别的可能性不一定相同。在某些情况下,它们几乎是 50/50,在其他情况下,它们更像是 90/10。
  • 通常C=0.001 提供良好的交叉验证结果。

文档包含警告,拦截本身需要正则化,就像其他所有功能一样,@​​987654323@ 可以用来解决这个问题。但是我应该如何选择这个值呢?一个简单的答案是探索Cintercept_scaling 的许多可能组合,并选择能够提供最佳性能的参数。但是这个参数搜索需要相当长的时间,如果可能的话我想避免这种情况。

理想情况下,我想使用截距来控制输出预测的分布。也就是说,我要确保分类器在训练集上预测“class 1”的概率等于“class 1”数据在训练集中的比例。我知道在某些情况下是这样,但在我的数据中并非如此。我不知道这是由于正则化还是输入数据的非高斯性质。

感谢您的任何建议!

【问题讨论】:

    标签: machine-learning classification regression scikit-learn regularized


    【解决方案1】:

    当您尝试通过设置class_weight="auto" 对正类进行过采样时?这有效地对代表性不足的类进行过采样,对多数类进行过采样。

    current stable docs 有点令人困惑,因为它们似乎是从SVC 复制粘贴的,而不是为 LR 编辑的;这只是在最前沿的版本中改变了。)

    【讨论】:

    • 感谢您的建议。我没有使用“auto”,因为我无法弄清楚它的作用(代码涉及多重继承,因此对我来说有点困惑)。相反,我只是将类权重设置为等于该类的复制数,因为这似乎是正确的。您可以链接到更新的文档吗?我无法通过谷歌搜索“sklearn 前沿”或访问 sklearn 网站的“前沿”部分找到它。
    • @cxrodgers:应该是scikit-learn.org/dev,但是补丁到现在我还不确定网站是否已经重建:)
    • 它看起来没有更新,但我会继续检查。这很有用,所以我很快就会接受这个答案,假设没有人出现向我解释intercept_scaling。我希望文档能明确说明正在优化的损失函数,这将使Cintercept_scaling 明确。我认为它与链接的研究论文中的相同,但术语完全不同,我不确定到底发生了什么,尤其是class_weight
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 2016-06-27
    • 2021-07-12
    • 1970-01-01
    • 2019-12-09
    • 2018-03-18
    • 2017-10-13
    • 2013-04-10
    相关资源
    最近更新 更多