Python 3.x python中的零膨胀泊松模型

Python 3.x python中的零膨胀泊松模型,python-3.x,data-analysis,statsmodels,Python 3.x,Data Analysis,Statsmodels,我想使用python3构建一个零膨胀泊松模型。我在库statsmodel中找到了函数statsmodels.discrete.count\u model.ZeroInflatePoisson 我只是想知道如何使用它。似乎我应该这样做: ZIFP(Y\u列,X\u列).fit() 但是当我想用X_检验进行预测时 它告诉我X\u测试的长度不适合X\u列车。 或者有其他适合这种型号的包装吗? 以下是我使用的代码: X1 = [random.randint(0,1) for i in range(200

我想使用python3构建一个零膨胀泊松模型。我在库
statsmodel
中找到了函数
statsmodels.discrete.count\u model.ZeroInflatePoisson

我只是想知道如何使用它。似乎我应该这样做:
ZIFP(Y\u列,X\u列).fit()

但是当我想用
X_检验
进行预测时
它告诉我
X\u测试的长度不适合
X\u列车
。 或者有其他适合这种型号的包装吗? 以下是我使用的代码:

X1 = [random.randint(0,1) for i in range(200)]
X2 = [random.randint(1,2) for i in range(200)]
y = np.random.poisson(lam = 2,size = 100).tolist()
for i in range(100):y.append(0)
df['x1'] = x1
df['x2'] = x2
df['y'] = y
df_x = df.iloc[:,:-1]
x_train,x_test,y_train,y_test = train_test_split(df_x,df['y'],test_size = 0.3)
clf = ZeroInflatedPoisson(endog = y_train,exog = x_train).fit()
clf.predict(x_test)

ValueError:operands could not be broadcat together with shapes (140,)(60,)
还尝试:

clf.predict(x_test,exog = np.ones(len(x_test)))

ValueError: shapes(60,) and (1,) not aligned: 60 (dim 0) != 1 (dim 0)

对我来说这看起来像个虫子

据我所知:

如果没有为通货膨胀模型指定解释变量exog_infl,则使用一组解释变量对恒定通货膨胀概率进行建模。 但是,如果predict中的exog_infl为None,则它使用model.exog_infl,这是一个长度等于训练样本的数组

在predict中指定长度正确的1-D数组应该是可行的

尝试:


如果在模型中使用了曝光,但在预测中没有明确指定,我想同样的问题也会发生。

我遇到了同样的问题,将我带到了这个线程上。正如Josef所指出的,似乎需要为exog_infl提供一个1-D数组,其中包含正确长度的数组。 但是,约瑟夫提供的代码遗漏了一维数组部分,因此生成所需数组所需的完整行实际上是

clf.predict(test_x, exog_infl=np.ones((len(test_x),1))

显示您尝试的实际代码。模型名称为
零膨胀泊松
拟合
预测
与statsmodels中其他模型的工作方式相同,添加了零膨胀部分的选项。train_x,test_x,train_y,test_y=train_test_split(data_x,data['y'],test_size=0.3)clf=零膨胀泊松(endog=train_x,exog=train_y).fit()clf.predict(test_x)ValueError:操作数无法与我尝试的形状(140,)(60,)一起广播。它显示“ValueError:形状(60,)和(1,)未对齐:60(dim 0)!=(dim 0)”如果我在训练中为exog_infl对齐一个数组。我每次做预测时是否都要更改它?编辑你的问题并添加完整的回溯,或者至少添加显示形状不匹配位置的最后一部分。信息性回溯是Python的一个很好的功能。零膨胀模型通常需要两个exog,如果exog_infl is None尚未正确处理。因此,在statsmodels中修复此问题之前,需要一个变通方法和完整的规范。(零膨胀是新的,在有足够的反馈来修复这些问题之前,仍然存在可用性缺陷。)我更新了我的代码。我尝试了
clf.predict(x_测试,exog_infl=len(x_测试))
它是有效的。但我不知道这个exog\u infl是否有意义。有没有解释一下为什么通常有两个exog?
clf.predict(test_x, exog_infl=np.ones((len(test_x),1))