【问题标题】:Weighted logistic regression in PythonPython中的加权逻辑回归
【发布时间】:2011-11-22 16:57:30
【问题描述】:

我正在寻找 Python 中逻辑回归(非正则化)的良好实现。我正在寻找一个也可以为每个向量获取权重的包。谁能建议一个好的实现/包? 谢谢!

【问题讨论】:

标签: python regression


【解决方案1】:

我注意到这个问题现在已经很老了,但希望这可以帮助某人。使用 sklearn,您可以使用 SGDClassifier 类创建逻辑回归模型,只需将“log”作为损失传入:

sklearn.linear_model.SGDClassifier(loss='log', ...).

该类在fit()函数中实现加权样本:

classifier.fit(X, Y, sample_weight=weights)

其中 weights 是一个包含样本权重的数组,其长度必须(显然)与 X 中的数据点数相同。

有关完整文档,请参阅 http://scikit-learn.org/dev/modules/generated/sklearn.linear_model.SGDClassifier.html。

【讨论】:

【解决方案2】:

“平衡”模式使用 y 的值自动调整权重,与输入数据中的类频率成反比,如 n_samples / (n_classes * np.bincount(y))

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(class_weight='balanced')

model = model.fit(X, y)

编辑

可以在 fit 方法中添加样本权重。你只需要传递一个 n_samples 数组。查看文档 -

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression.fit

希望这样做...

【讨论】:

  • 这指的是类不平衡,但是如果我们想为每个样本使用单独的权重呢?
  • 好问题@mrgloom!您可以通过提供权重字典而不是“平衡”来指定权重。与 {class_label: weight} 形式的类关联的权重。如果没有给出,所有的类都应该有一个权重。
  • 我需要为每个样本单独重量,而不是为每个班级。
  • 我不认为这是现成的。您可能必须使用自己版本的成本函数和梯度下降更新来做到这一点。
【解决方案3】:

我想你想要的是statsmodels。它对 GLM 和其他线性方法有很好的支持。如果您来自 R,您会发现语法非常熟悉。

statsmodels weighted regression

getting started w/ statsmodels

【讨论】:

  • 这个 statsmodels 解决方案是否还会提供每个因变量的 p 值?
【解决方案4】:

【讨论】:

  • sklearn.linear_model.LogisticRegression 是一个类,他的fit 方法让你定义权重。
  • @ohe 怎么样?我找到了fit 方法,但它只接受标签和特征的参数。不是重量。
  • @KentMuntheCaspersen 我的答案很老了!此时fit方法带了一个class_weight参数。它现在位于__init__。这可能是您正在关注的内容。
  • @ohe 这解释了很多。谢谢你四年后回来。我认为问题是关于训练的加权实例,而不仅仅是类权重。至少,这就是我一直在寻找的。​​span>
【解决方案5】:

你知道 Numpy 吗?如果不是,请查看 Scipy 和 matplotlib。

【讨论】:

  • Scipy 和 Numpy dot 有任何逻辑回归实现(或者我找不到任何......)。 matplotlib 主要用于图形、绘图等...
  • 谢谢!我看到了,但是它实现了 L2 正则化逻辑回归(而不是正则逻辑回归),此外它没有实现权重......
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 2016-12-01
  • 2015-09-20
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多