2016-02-23 60 views
0

我目前正在使用scikit-learn來處理多標籤分類問題,並且在學習如何獲得每個類/標籤的預測概率方面遇到了一些問題 - 類似於scikit-learn的.predict_proba()方法在二元分類任務上所做的。理解多標籤問題的預測概率

我的y是一個100x10二維數組,有10個獨特的類,我使用scikit-learn的ensemble.RandomForestClassifier()作爲我的分類器。

我想要做的就是預測一組給定特徵屬於y中某個類別(在下面註明爲cl_)的概率。所以基本上我想象的輸出與此類似:

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 

注:我有適合隨機森林分類的​​數據集和.predict()方法按預期工作。但是,.predict_proba()方法返回形狀爲C x M的概率,其中C是唯一類的數量,而M是數據集中實例的數量。

澄清/更新:下面是我的數據集的實際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] 

使用上X_test.predict_proba()返回形狀的2D陣列39 X 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

是通過預處理.MultiLabelBinarizer()。我使用它是因爲多個標籤。我以100×10爲例--100是實例數的例子,10是10個獨特的類。 – ralston

+0

你可以發佈幾個訓練樣例的示例輸出嗎?僅僅是列沒有總結到一個?因爲聽起來你想要一個M x C代碼作爲你的輸出,對嗎? –

回答

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