这似乎是我所见过的常见错误,但有许多潜在的原因。
我正在尝试在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
关于什么可能出错的任何想法?
答案 0 :(得分:1)
定义您使用的变量或者至少用类似的数据替换数据会很有帮助,但我认为无论如何我都找到了您的问题。
执行列车测试时,train
和test
是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