Estoy siguiendo este ejemplo en el sitio web scikit-learn para realizar una clasificación de múltiples salidas con un modelo de bosque aleatorio.
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))
De esto predict_proba
obtengo 2 matrices de 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]])]
Realmente esperaba un n_sample
porn_classes
matriz. Me cuesta entender cómo se relaciona esto con la probabilidad de las clases presentes.
Los documentos para los predict_proba
estados:
matriz de forma = [n_muestras, n_clases], o una lista de n_salidas tales matrices si n_salidas> 1.
Las probabilidades de clase de las muestras de entrada. El orden de las clases corresponde al del atributo classes_.
Supongo que tengo lo último en la descripción, pero todavía me cuesta entender cómo se relaciona esto con las probabilidades de mi clase.
Además, cuando intento acceder al classes_
atributo para el forest
modelo obtengo un AttributeError
y este atributo no existe en el MultiOutputClassifier
. ¿Cómo puedo relacionar las clases con la salida?
print(forest.classes_)
AttributeError: 'RandomForestClassifier' object has no attribute 'classes_'