2016-07-26 4 views
5

私はthis example of stackingを勉強しています。この場合、各K-foldの集合は1列のデータを生成し、これは各分類器ごとに繰り返されます。すなわち:ブレンドする行列は次のとおりです。マルチクラスにバイナリスタッキングの例を適用する

dataset_blend_train = np.zeros((X.shape[0], len(clfs))) 
dataset_blend_test = np.zeros((X_submission.shape[0], len(clfs))) 

私はマルチクラス問題(サンプルあたり15回の異なるクラスをちゃったごめんなさい)から予測をスタックする必要があります。これは、各clfに対してn * 15の行列を生成します。

これらの行列は水平に連結するだけですか?ロジスティック回帰が適用される前に、それらを何らかの方法で結合すべきか?ありがとう。次の2つの方法でマルチクラス問題にコードを適応させることができ

答えて

5

  1. 連結し、水平方向の確率、それはあなたが作成する必要がありますです: dataset_blend_train = np.zeros((X.shape[0], len(clfs)*numOfClasses)) dataset_blend_test = np.zeros((X_submission.shape[0], len(clfs)*numOfClasses))
  2. 代わりに確率を使用しての、ベースモデルのクラス予測を使用します。あなたは配列を同じサイズに保ちますが、predict_probaの代わりにpredictを使うだけです。

私は正常に両方を使用しましたが、どちらがうまくいくかはデータセットによって異なる場合があります。

+0

ありがとう、ありがとう。 –

0

各クラシファイアを繰り返していくうちに機能を拡張するという問題もあります。私は以下を使用します:

db_train = np.zeros((X_train.shape[0], np.unique(y).shape[0]))  
db_test = clf.predict_proba(X_test) 

... 

try: 
    dataset_blend_train 
except NameError: 
    dataset_blend_train = db_train 
else: 
    dataset_blend_train = np.hstack((dataset_blend_train, db_train)) 

try: 
    dataset_blend_test 
except NameError: 
    dataset_blend_test = db_test 
else: 
    dataset_blend_test = np.hstack((dataset_blend_test, db_test)) 
関連する問題