2016-02-23 2 views
0

В настоящее время я работаю над проблемой классификации с несколькими метками, используя scikit-learn, и у меня возникли проблемы с изучением того, как получить прогнозируемые вероятности для каждого класса/метки - аналогично тому, как метод scikit-learn .predict_proba() выполняет двоичные задачи классификации.Усвоение прогнозируемых вероятностей для многоточечных проблем

Мой y - это массив 100x10 2d, имеющий 10 уникальных классов, и я использую scikit-learn ensemble.RandomForestClassifier() в качестве моего классификатора.

Что я хотел бы сделать, просто предсказать вероятность того, что набор заданных объектов относится к одному из классов (отмечен ниже как cl_) в y. Поэтому в основном я себе выход похож на это:

cl_1 | cl_2 | cl_3 | cl_4 | cl_5 | cl_6 | cl_7 | cl_8 | cl_9 | cl_10 
--------------------------------------------------------------------- 
0.0 | 0.0 | 0.0 | 0.1 | 0.3 | 0.0 | 0.0 | 0.0 | 0.6 | 0.0 

ПРИМЕЧАНИЕ: меня подходят классификатор Random Forest к набору данных и метод .predict() работает, как ожидалось. Тем не менее, метод возвращает .predict_proba() вероятность в виде С й М, гдеС является количество уникальных классов, а М этим количество экземпляров в наборе данных.

Осветление/Update: Вот фактический y экземпляр из моего набора данных:

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0] 

Используя .predict_proba() на X_test возвращает 2d-массив формы 39 х 848048 (где 39 это число уникальных классов и 848 048 - количество экземпляров). Так что, в условиях неспециалиста, я спрашиваю: как мне сделать с того, что возвращается .predict_proba() (в той мере, в какой это касается вышеприведенной диаграммы).

Примечание: Это:

y_hat_proba = clf.predict_proba(X_test) 
print(y_hat_proba[0][1]) 

возвращает [ 1. 0.]

+0

Является ли ваша переменная класса. И вы разогрели его кодирование или что-то еще? В других словах каждый ярлык класса является бинарным вектором? Я не понимаю, почему его 100 x 10. –

+0

Yea y был перенесен через preprocessing.MultiLabelBinarizer(). Я использую это из-за нескольких ярлыков. Я использовал 100 x 10 в качестве примера - 100 - примерное число экземпляров, а 10 - 10 уникальных классов. – ralston

+0

Можете ли вы опубликовать примеры выводов для нескольких примеров обучения? Разве столбцы не суммируются? Потому что это звучит так, как будто вы хотели бы M x C ndarray в качестве вывода, верно? –

ответ

2

Вы можете использовать .predict_proba(X_test), чтобы получить вероятность в классе на новом множестве точек. Если вам нужно предсказание для одной точки, просто убедитесь, что X_test имеет одну строку.

Форма выхода должна быть в форме [n_samples, n_classes] (в тестовом наборе). You can see the function's documentation.

+0

Ненавижу к добавлению актуального кода на вопрос, потому что я чувствую, что это усложняет ситуацию, но я думаю, что это необходимо для разъяснения в этом случае. Я буду изменять свой вопрос с обновлениями. – ralston

+0

Выход не будет [n_samples, n_features]. Возможно, вы неправильно поняли документацию. –

+1

Извините, это будет [n_samples, n_classes], если вход не разрежен. Я уточню свой ответ. – Dimosthenis

Смежные вопросы