【问题标题】:Statsmodels - broadcast shapes different?Statsmodels - 广播形状不同?
【发布时间】:2015-05-18 23:09:05
【问题描述】:

我正在尝试使用 statsmodels 中的 logit 模块对包含布尔目标变量(“默认”)和两个特征(“fico_interp”、“home_ownership_int”)的数据集执行逻辑回归。所有三个值都来自同一个数据框“traindf”:

from sklearn import datasets
import statsmodels.formula.api as smf

lmf = smf.logit('default ~ fico_interp + home_ownership_int',traindf).fit()

这会产生错误消息:

ValueError: 操作数不能与形状一起广播 (40406,2) (40406,)

怎么会这样?

【问题讨论】:

  • fico_interphome_ownership_int 列之一是 (x,2) 数组。尝试将它们可视化
  • 我的猜测是布尔目标变量不起作用。尝试将其转换为int。 patsy 将布尔值视为分类变量并将其转换为不适用于 Logit 的二维响应变量。在 statsmodels 中应该已经有一个未解决的问题,但还没有解决方案。
  • @wajdi 嗨,Wajdi - 这似乎无法解决问题。 home_ownership_int 确实是一个分类变量,但是当我替换一个连续变量时,我会收到相同的错误消息。我还注意到每个变量都是具有相同尺寸的 dtype 'object' - (40407,)

标签: python statsmodels


【解决方案1】:

问题在于traindf['default'] 包含非数字值。

以下代码重现了错误:

import pandas as pd, numpy as np, statsmodels.formula.api as smf
df = pd.DataFrame(np.random.randn(1000,2), columns=list('AB'))
df['C'] = ((df['B'] > 0)*1).apply(str)
lmf = smf.logit('C ~ A', df).fit()

以下代码是修复此实例的一种可能方法:

df.replace(to_replace={'C' : {'1': 1, '0': 0}}, inplace = True)
lmf = smf.logit('C ~ A', df).fit()

这个post 报告了一个类似的问题。

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 2019-12-03
    • 2021-07-20
    • 1970-01-01
    • 2016-10-23
    • 2018-05-09
    • 2019-09-01
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多