SciKit-Learn:预测时出错

时间:2017-08-02 15:44:25

标签: python scikit-learn logistic-regression

这似乎是我所见过的常见错误,但有许多潜在的原因。

我正在尝试在Python中组合逻辑回归。我的数据保存为pandas数据框。

train, test = train_test_split(final_dat[train_cols], train_size=0.80, random_state=1)
logit = sm.Logit(train['SPR_Created__c'], train.drop(['SPR_Created__c'], axis=1)) 
result = logit.fit()
print result.summary()
result.predict(test[train_cols])

错误:

result.predict(test[train_cols])

ValueError: shapes (13664,18) and (17,) not aligned: 18 (dim 1) != 17 (dim 0)

由于所有大多数变量都已调整,我不确定是否会出现此错误。

final_dat[train_cols].info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 68319 entries, 0 to 31978
Data columns (total 18 columns):
Is_Subject                                68319 non-null int64
Is_Description                            68319 non-null int64
SPR_Created__c                            68319 non-null int64
description2_contains_any_synonym         68319 non-null int64
description_length                        68319 non-null int64
subject_length                            68319 non-null int64
description2_length                       68319 non-null int64
Is_Description2                           68319 non-null int64
Is_Adverse_Event                          68319 non-null int64
subject_contains_common_spr_terms         68319 non-null int64
description_contains_common_spr_terms     68319 non-null int64
description2_contains_common_spr_terms    68319 non-null int64
pattern_exists_in_description             68319 non-null int64
pattern_exists_in_description_count       68319 non-null float64
pattern_exists_in_description2            68319 non-null int64
pattern_exists_in_description2_count      68319 non-null float64
subject_contains_any_synonym              68319 non-null int64
description_contains_any_synonym          68319 non-null int64
dtypes: float64(2), int64(16)
memory usage: 12.4 MB

关于什么可能出错的任何想法?

1 个答案:

答案 0 :(得分:1)

定义您使用的变量或者至少用类似的数据替换数据会很有帮助,但我认为无论如何我都找到了您的问题。

执行列车测试时,traintest是DataFrames,其中的列是从train_cols定义的。我假设'{1}}中必须包含'SPR_Created__c'。

您要做的是使用train_cols预测所有列,包括您的目标列'SPR_Created__c'。但是,您希望使用“SPR_Created__c”的所有列EXCEPT。而不是做test(这是多余的,因为那些已经是result.predict(test[train_cols])中的唯一列,所以你只能使用test代替test)你想做{ {1}}。

这就是你的形状被一个人关闭的原因,因为你正在使用test[train_cols]中的所有列训练你的模型,除了'SPR_Created__c',但你正在用所有这些列测试你的模型。

TL; DR:result.predict(test.drop(['SPR_Created__c']))代替train_cols