2017-08-02 13 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) 

は、私はすべてのほとんどの変数が調整されているように、このエラーの出現についてはよく分かりません。

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

result.predict(test.drop(['SPR_Created__c']))、あなたのデータを追加することはできますか? – sera

答えて

1

あなたが使用する変数を定義するか、少なくとも類似したデータに置き換えるのが役に立ちますが、とにかく問題を見つけたと思います。

列車テストの分割を実行すると、traintestは、列がtrain_colsで定義されているDataFramesです。私は 'SPR_Created__c'がtrain_colsに含まれなければならないと仮定します。

あなたがしようとしているのは、testを使用して、ターゲット列 'SPR_Created__c'を含むすべての列を予測することです。ただし、 'SPR_Created__c'以外のすべての列を使用する必要があります。 result.predict(test[train_cols])を実行する代わりに(これはtestの唯一の列であるため、とにかく冗長です)、の代わりにtest[train_cols]の代わりにtestを使用することができます。

これは、 'SPR_Created__c'以外のすべての列をtrain_colsにしてモデルをトレーニングしているため、モデルがすべてオフラインになっているためです。

TL; DR:代わりにresult.predict(test[train_cols])