sklearn - предсказать вероятность каждого класса

На данный момент я получил еще один пост и документацию sklearn

В общем, я хочу привести следующий пример:

X = np.matrix([[1,2],[2,3],[3,4],[4,5]])
y = np.array(['A', 'B', 'B', 'C', 'D'])
Xt = np.matrix([[11,22],[22,33],[33,44],[44,55]])
model = model.fit(X, y)
pred = model.predict(Xt)

Однако для вывода я хотел бы видеть 3 столбца для наблюдения в качестве вывода из pred:

 A  |  B  |  C
.5  | .2  | .3
.25 | .25 | .5
...

и разные вероятности для каждого класса, появляющиеся в моем прогнозе.

Я считаю, что лучший подход будет Multilabel classification из второй ссылки, которую я предоставил выше. Кроме того, я думаю, что было бы неплохо сесть в один из multi-label или же multi-output модели, перечисленные ниже:

Support multilabel:

    sklearn.tree.DecisionTreeClassifier
    sklearn.tree.ExtraTreeClassifier
    sklearn.ensemble.ExtraTreesClassifier
    sklearn.neighbors.KNeighborsClassifier
    sklearn.neural_network.MLPClassifier
    sklearn.neighbors.RadiusNeighborsClassifier
    sklearn.ensemble.RandomForestClassifier
    sklearn.linear_model.RidgeClassifierCV

Support multiclass-multioutput:

    sklearn.tree.DecisionTreeClassifier
    sklearn.tree.ExtraTreeClassifier
    sklearn.ensemble.ExtraTreesClassifier
    sklearn.neighbors.KNeighborsClassifier
    sklearn.neighbors.RadiusNeighborsClassifier
    sklearn.ensemble.RandomForestClassifier

Тем не менее, я ищу кого-то, кто имеет больше уверенности и опыта, чтобы сделать это правильно. Все отзывы приветствуются.

-bmc

1 ответ

Из того, что я понимаю, вы хотите получить вероятности для каждого из потенциальных классов для мультиклассового классификатора.

В Scikit-Learn это можно сделать с помощью универсальной функции предиката_проба. Это реализовано для большинства классификаторов в scikit-learn. Вы в основном звоните:

clf.predict_proba(X)

куда clf обученный классификатор В качестве вывода вы получите десятичный массив вероятностей для каждого класса для каждого входного значения.

Одно слово предостережения - не все классификаторы естественным образом оценивают вероятности классов. Например, SVM этого не делает. Вы все еще можете получить вероятности класса, но чтобы сделать это при построении таких классификаторов, вам нужно дать ему команду выполнить оценку вероятности. Для SVM это будет выглядеть так:

SVC(Probability=True)

После того, как вы установите его, вы сможете использовать predict_proba как прежде.

Я должен предупредить вас, что если классификатор не оценивает вероятности естественным образом, это означает, что вероятности будут оцениваться с использованием довольно широких вычислительных методов, которые могут значительно увеличить время обучения. Поэтому я советую вам использовать классификаторы, которые естественным образом оценивают вероятности классов (нейронные сети с выходом softmax, логистической регрессией, повышением градиента и т. Д.)

Попробуйте использовать откалиброванную модель:

# define model
model = SVC()
# define and fit calibration model
calibrated = CalibratedClassifierCV(model, method='sigmoid', cv=5)
calibrated.fit(trainX, trainy)
# predict probabilities
print(calibrated.predict_proba(testX)[:, 1])
Другие вопросы по тегам