2014-03-24 73 views
0

我正在使用scikit-learn進行分類。有沒有辦法得到一個概率矢量,說分類器對於它的預測有多信心?我想要一個整個測試集的矢量,而不僅僅是一個單一的元素。基本上我需要這個來計算ROC曲線和AUC。返回預測的概率向量

回答

0

在scikit-learn中,對於任何分類方法,您可以打開probability選項並使用predict_proba方法獲取每個類的元素的概率。例如,使用著名的虹膜數據集,

from sklearn import svm 
from sklearn import datasets 

# train set 
iris = datasets.load_iris() 
X = iris.data[0::2, :2] 
Y = iris.target[0::2] 

clf = svm.SVC(probability=True) 
clf.fit(X, Y) 

# test set 
Z = iris.data[1::2, :2] 

Y_predict = clf.predict(Z) 
Y_actual = iris.target[1::2] 
Y_probas = clf.predict_proba(Z) # probabilities of each classification 
+1

其實只有'SVC'有'probability'標誌。大多數其他分類器或者有'predict_proba'或者他們沒有; 'SGDClassifier'有條件地基於其'loss'參數。 –

1

如果你唯一的目標是獲得ROC曲線和AUC,checkout出來sklearn.metrics.roc_auc_scorehere

從文檔:

>>> import numpy as np 
>>> from sklearn.metrics import roc_auc_score 
>>> y_true = np.array([0, 0, 1, 1]) 
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8]) 
>>> roc_auc_score(y_true, y_scores) 
0.75 

注意roc_auc_score只適用於二元分類任務 - 如果你正在處理多類分類你可能有單獨的計算值roc_auc_score爲每個類。

1

許多分類器有decision_function方法或predict_proba方法(或兩者),它們可以用來獲得軟分數而不是硬判決。示例:

>>> import numpy as np 
>>> X = np.random.randn(10, 4) 
>>> y = np.random.randint(0, 2, 10) 
>>> from sklearn.svm import LinearSVC 
>>> svm = LinearSVC().fit(X, y) 
>>> svm.decision_function(X) 
array([-0.92744332, 0.78697484, -0.71569751, -0.19938963, -0.15521737, 
     0.45962204, 0.1326111 , 0.44614422, 0.95731802, 0.8980536 ]) 

在這種情況下,值是線性SVM的超平面的帶符號距離。 predict_proba是在它返回概率矩陣略有不同,但你可以通過索引獲得正概率的矢量:

>>> from sklearn.linear_model import LogisticRegression 
>>> lr = LogisticRegression().fit(X, y) 
>>> lr.predict_proba(X) 
array([[ 0.73987796, 0.26012204], 
     [ 0.26009545, 0.73990455], 
     [ 0.63918314, 0.36081686], 
     [ 0.62055698, 0.37944302], 
     [ 0.54361598, 0.45638402], 
     [ 0.38383357, 0.61616643], 
     [ 0.50740302, 0.49259698], 
     [ 0.39236783, 0.60763217], 
     [ 0.32553896, 0.67446104], 
     [ 0.20791651, 0.79208349]]) 
>>> lr.predict_proba(X)[:, 1] 
array([ 0.26012204, 0.73990455, 0.36081686, 0.37944302, 0.45638402, 
     0.61616643, 0.49259698, 0.60763217, 0.67446104, 0.79208349]) 
+0

如果我想返回總體概率,我應該如何找到這些值之間的平均值? – user3378649

+0

@ user3378649我並不認爲「整體概率」是一個條件模型中定義明確的概念。這取決於你想要做什麼。 –