2016-07-26 24 views
5

Studiuję this example of stacking. W takim przypadku każdy zestaw zagięć K generuje jedną kolumnę danych, i to jest powtarzane dla każdego klasyfikatora. Tj: matryc do mieszania są:Adaptacja przykładowego układania binarnego do multiclass

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

trzeba układać przewidywań z multiclass problem (probs 15 różnych klas na próbkę). Spowoduje to utworzenie macierzy n * 15 dla każdego clf.

Czy te macierze należy po prostu połączyć w poziomie? A może powinny być połączone w jakiś inny sposób, zanim zastosowana zostanie regresja logistyczna? Dzięki.

Odpowiedz

5

Można dostosować kod do problemu multi-klasy na dwa sposoby:

  1. łączyć w poziomie prawdopodobieństwa, że ​​to będzie trzeba utworzyć: dataset_blend_train = np.zeros((X.shape[0], len(clfs)*numOfClasses)) dataset_blend_test = np.zeros((X_submission.shape[0], len(clfs)*numOfClasses))
  2. Zamiast prawdopodobieństwa, użyj predykcji klas dla modeli podstawowych. W ten sposób utrzymasz tablice o tym samym rozmiarze, ale zamiast predict_proba używasz tylko predict.

Użyłem obu pomyślnie, ale która działa lepiej może zależeć od zbioru danych.

+0

Doskonała odpowiedź, wielkie dzięki. –

0

Występuje również problem rozszerzenia funkcji podczas przechodzenia przez poszczególne klasyfikatory. Używam:

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))