【问题标题】:Confusion in sklearn Logistic Regressionsklearn逻辑回归中的困惑
【发布时间】:2018-01-11 17:35:19
【问题描述】:

我正在阅读 documentation 的逻辑回归并遇到了困惑。特别是,我对fit_interceptintercept_scaling 的用法感到困惑

fit_intercept : bool,默认值:True

指定是否应将常数(也称为偏差或截距)添加到 决策函数。

intercept_scaling:浮点数,默认为 1。

仅在使用求解器 liblinearself.fit_intercept 时有用 设置为True。在这种情况下,x 变为 [x, self.intercept_scaling], 即恒定值等于的“合成”特征 intercept_scaling 附加到实例向量。拦截 变为intercept_scaling * synthetic_feature_weight

注意!合成特征权重受 l1/l2 正则化 与所有其他功能一样。减少正则化对 合成特征权重(因此在截距上) intercept_scaling 必须增加。

据我了解,截距充当数据集的虚拟功能,因为每次进行预测时都会将其添加到输出中。

intercept_scaling下的段落中,提到了-

具有常数值的“综合”特征等于 intercept_scaling 附加到实例向量

但这两个不是一回事吗?这是我的主要问题和困惑。

最后,文档提到这仅在我使用 liblinear 作为求解器时才有用。如果这两个确实相同并且我将fit_intercept 保留为True,那么会发生什么?

【问题讨论】:

  • 您是否看到部分说 [intercept_scaling is] 仅当... self.fit_intercept 设置为 True 时才有用?
  • 文档确实有些混乱。 fit_intercept 只是告诉 sklearn 向决策函数添加拦截的指令。不过既然要学会拦截,那么synthetic_feature_weight就派上用场了,基本上就是拦截了。 intercept_scaling 在正则化中起作用,因为截距也会受到惩罚,因此您可以通过增加 intercept_scaling 来增加截距项的权重来抵消惩罚。
  • @kazemakase,已编辑,谢谢
  • @Scratch'N'Purr,这是有道理的。谢谢。如果你不介意,你能把它作为答案吗?
  • @ClockSlave 没问题。我只是将其添加为答案。干杯!

标签: python scikit-learn


【解决方案1】:

fit_intercept 只是一个指令,告诉 sklearn 在决策函数中添加拦截。不过既然要学会拦截,那么synthetic_feature_weight就派上用场了,基本上就是拦截了。 intercept_scaling 在正则化中发挥作用,因为截距也会受到惩罚,因此您可以通过增加 intercept_scaling 来增加截距项的权重来抵消惩罚。

我没有找到任何改变intercept_scaling参数的理由,因为毕竟截距是由算法学习的,所以如果你甚至不知道截距是什么,那为什么要缩放它的效果呢?

【讨论】:

  • 这是一个有趣的问题。为什么要改变 intercept_scaling 的值呢?我将尝试运行一些具有不同拦截缩放值的模型。
  • 让我知道你的发现。我很好奇。我还在考虑修改intercept_scaling 的一个潜在案例是,如果您在 X 中的其他功能非常糟糕。也许运行一个数据集,其中 X 中的特征有利于区分类别,而另一个数据集 X 中的特征不利于区分类别。
猜你喜欢
  • 1970-01-01
  • 2015-05-04
  • 2016-03-06
  • 2014-01-20
  • 2014-01-19
  • 2019-07-26
  • 2021-03-11
  • 2013-12-24
  • 2020-07-04
相关资源
最近更新 更多