簡體   English   中英

如何正確重塑sklearn分類器的predict_proba的多類output?

[英]How to correctly reshape the multiclass output of predict_proba of a sklearn classifier?

我有 10 個班級的多班級問題。 使用任何帶有 predict_proba 的 sklearn 分類器,我得到一個 output

(n_classes, n_samples, n_classes_probability_1_or_0)

就我而言(10, 4789, 2)

現在使用二進制分類我會做

model.predict_proba(X)[:, 1]

我曾假設:

pred = np.array(model.predict_proba(X))
pred = pred.reshape(-1, 10, 2)[:, :, 1]

會做同樣的事情,但訂單完全關閉。

現在y[:, class]對應於pred[class, :, 1]

我知道我想錯了形狀,但不幸的是我看不到。

如何正確重塑它? 目標是在 roc_auc_score 指標中使用它,我想要一個形狀為(instances, classes_probabilities = 1)

你能幫忙嗎? 先感謝您!

如果您提到您正在使用MultiOutputClassifier這將很有用,因為 scikit learn 中的大多數多類分類器不會返回像您這樣的東西,因此使用示例數據集:

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.multioutput import MultiOutputClassifier
from sklearn import preprocessing

lb = preprocessing.LabelBinarizer()

from sklearn.datasets import make_classification
X, y = make_classification(n_samples=500,n_classes=10,n_informative=10,n_clusters_per_class=1)
y = lb.fit_transform(y)

設置分類器

forest = RandomForestClassifier(n_estimators=10, random_state=1)
model = MultiOutputClassifier(forest, n_jobs=-1)
model.fit(X, y)

您無需考慮重塑它,只需提取值:

pred = np.array(model.predict_proba(X))

就像您之前所做的那樣,這將對應於每一行是 class,每一列都是您的觀察:

pred[:,:,1].shape
(10, 500)

要獲得您的概率,只需轉置:

prob1 = pred[:,:, 1].T

prob1[:2]
array([[0.9, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
       [0.1, 0. , 0.1, 0. , 0.7, 0. , 0.1, 0. , 0.1, 0. ]])

與我們實際提取它並堆疊相比:

prob2 = np.hstack([i[:,1].reshape(-1,1) for i in model.predict_proba(X)])
array([[0.9, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
   [0.1, 0. , 0.1, 0. , 0.7, 0. , 0.1, 0. , 0.1, 0. ]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM