Podążam za tym przykładem na stronie scikit-learn, aby przeprowadzić klasyfikację wielu wyników za pomocą modelu Random Forest.
from sklearn.datasets import make_classification
from sklearn.multioutput import MultiOutputClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.utils import shuffle
import numpy as np
X, y1 = make_classification(n_samples=5, n_features=5, n_informative=2, n_classes=2, random_state=1)
y2 = shuffle(y1, random_state=1)
Y = np.vstack((y1, y2)).T
forest = RandomForestClassifier(n_estimators=10, random_state=1)
multi_target_forest = MultiOutputClassifier(forest, n_jobs=-1)
multi_target_forest.fit(X, Y).predict(X)
print(multi_target_forest.predict_proba(X))
Z tego predict_proba
otrzymuję 2 tablice 5x2:
[array([[ 0.8, 0.2],
[ 0.4, 0.6],
[ 0.8, 0.2],
[ 0.9, 0.1],
[ 0.4, 0.6]]), array([[ 0.6, 0.4],
[ 0.1, 0.9],
[ 0.2, 0.8],
[ 0.9, 0.1],
[ 0.9, 0.1]])]
Byłem naprawdę spodziewa się n_sample
przez n_classes
matrycę. Próbuję zrozumieć, w jaki sposób odnosi się to do prawdopodobieństwa obecności klas.
W docs dla predict_proba
stanów:
tablica shape = [n_samples, n_classes] lub lista n_outputs takich tablic, jeśli n_outputs> 1.
Prawdopodobieństwa klasowe próbek wejściowych. Kolejność klas odpowiada kolejności w atrybucie klas_.
Chyba mam to drugie w opisie, ale wciąż staram się zrozumieć, w jaki sposób odnosi się to do prawdopodobieństwa mojej klasy.
Ponadto, gdy próbuję uzyskać dostęp do classes_
atrybutu forest
modelu, otrzymuję AttributeError
i ten atrybut nie istnieje na MultiOutputClassifier
. Jak mogę powiązać klasy z danymi wyjściowymi?
print(forest.classes_)
AttributeError: 'RandomForestClassifier' object has no attribute 'classes_'
W
MultiOutputClassifier
traktujesz dwa wyniki jako oddzielne zadania klasyfikacji; z połączonych dokumentów:Zatem dwie tablice na wynikowej liście reprezentują każdy z dwóch klasyfikatorów / zmiennych zależnych. Tablice są zatem wyjściowymi klasyfikacjami binarnymi (kolumny, które są prawdopodobieństwem klasy 0, prawdopodobieństwem klasy 1), o których wspomniał @ chrisckwong821, ale po jednym dla każdego problemu.
Innymi słowy, zwracana wartość
predict_proba
będzie listą, której długość jest równa szerokości twojejy
, tj.n_outputs
W twoim przypadku 2. Twój cytat zpredict_proba
odniesień do dokumentacjin_outputs
, który jest wprowadzony w dokumentacji dlafit
:źródło
n_outputs
Pierwsze pytanie:
Pierwsza tablica 5x2 daje prawdopodobieństwa 5 próbek testowych sklasyfikowanych w pierwszej klasie. Ponadto pierwsza kolumna tej tablicy 5x2 mówi „prawdopodobieństwo, że próbka testowa nie zostanie sklasyfikowana jako pierwsza klasa”, a druga kolumna tej tablicy 5x2 mówi „prawdopodobieństwo, że próbka testowa zostanie sklasyfikowana jako pierwsza klasa „.
Podobnie, druga tablica 5x2 daje prawdopodobieństwo klasyfikacji testowania próbek w drugiej klasie.
Jeśli chcesz to sprawdzić, możesz porównać wartość w tych tablicach z wynikami z
predict
.Czasami powrót wartości
predict_proba
może dać listę zawierającą tablice Nx1 i tablice Nx2. Jeśli tak, żadne dane testowe nie są klasyfikowane do tych reprezentowanych klas tablic Nx1.źródło