StatsModel logit.predict错误:数据参数与新值之间的行数不匹配

问题描述 投票:0回答:1

我有一个火车数据框(227845行)和一个测试数据框(56962行)。我想做的是对火车数据运行statsmodel logit回归,然后预测测试数据的值。但是当我训练模型并尝试预测测试值后,我得到了错误:

PatsyError: Number of rows mismatch between data argument and train.loc[:, train.columns != 'Class'] (56962 versus 227845)
train['Class'] ~ train.loc[:, train.columns != 'Class']

我的分析步骤是:

import statsmodels.formula.api as smf
from statsmodels.formula.api import logit
from sklearn.model_selection import train_test_split

dataS =  pd.read_csv('sample.csv')
train, test = train_test_split(dataS , test_size=0.3, random_state=0)

数据列:

['Time' 'V1' 'V2' 'V3' 'V4' 'V5' 'V6' 'V7' 'V8' 'V9' 'V10' 'V11' 'V12'
 'V13' 'V14' 'V15' 'V16' 'V17' 'V18' 'V19' 'V20' 'V21' 'V22' 'V23' 'V24'
 'V25' 'V26' 'V27' 'V28' 'Amount' 'Class']  

mod = logit("dataS['Class']  ~ dataS.loc[:, dataS.columns != 'Class']", data = dataS).fit()

predictions = mod.predict(test.loc[:, test.columns != 'Class'])

我试图用sklearn.linear_model.LogisticRegressionstatsmodel.Logit来运行它,在两种情况下predict()都可以正常工作,但是分析的统计信息不是我期望与smf模型进行比较的统计信息。

有人可以帮忙吗?

python pandas scikit-learn predict
1个回答
0
投票

我有相同的问题,但是如果我有两列以上并且不能使用其原始名称,该如何使用公式Y〜X1 + X2?而且我无法将其名称更改为X1,X2,X3。例如:

x= train_table.iloc[: ,5 : 19]
y= train_table[target_name]
X_test = test_table.iloc[: ,5 : 19]
mod = smf.quantreg('y ~ x',data)
res = mod.fit(q = 0.99 )
y_pred= res.predict(x)   #  works
y_pred= res.predict(X_test)   # doesn't work
© www.soinside.com 2019 - 2024. All rights reserved.