2017-08-02 30 views
0

这似乎是我见过的常见错误,但有一些潜在的原因。SciKit-Learn:预测时出错

我想在Python中放在一起逻辑回归。我的数据被保存为熊猫数据框。

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) 

我不知道这个错误occurence所有最变量进行了调整。

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

您可以将您的数据? – sera

回答

1

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

当您执行列车测试拆分时,traintest是DataFrame,其中的列是从train_cols定义的。我假设'SPR_Created__c'必须包含在train_cols中。

您要做的是使用test预测所有列,包括您的目标列'SPR_Created__c'。但是,您希望使用“SPR_Created__c”以外的所有列。而不是做result.predict(test[train_cols])(无论如何这是多余的,因为那些已经是test中的唯一列,所以你可以只使用test而不是test[train_cols])你想要做result.predict(test.drop(['SPR_Created__c']))

这就是你的形状偏离1的原因,因为除了'SPR_Created__c',你正在训练模型的所有列为train_cols,但是你正在测试你的模型和所有这些列。

TL; DR:result.predict(test.drop(['SPR_Created__c'])),而不是result.predict(test[train_cols])