我正在使用scikit-learn進行分類。有沒有辦法得到一個概率矢量,說分類器對於它的預測有多信心?我想要一個整個測試集的矢量,而不僅僅是一個單一的元素。基本上我需要這個來計算ROC曲線和AUC。返回預測的概率向量
回答
在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
如果你唯一的目標是獲得ROC曲線和AUC,checkout出來sklearn.metrics.roc_auc_score
here。
從文檔:
>>> 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
爲每個類。
許多分類器有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])
如果我想返回總體概率,我應該如何找到這些值之間的平均值? – user3378649
@ user3378649我並不認爲「整體概率」是一個條件模型中定義明確的概念。這取決於你想要做什麼。 –
- 1. 預測概率
- 2. LogisticRegression預測概率
- 3. Predict.Plot的預測概率
- 4. Tensorflow,預測值的概率?
- 5. KNeighborsClassifier的概率預測方法只返回0和1
- 6. 預測概率等於1
- 7. OPencv SVM預測概率
- 8. 概率的穩定向量
- 9. plyr + simpleboot:NA在概率向量
- 10. 添加概率的預測值
- 11. 使用glm的條件預測概率
- 12. Tensorflow,預測值的概率(ROI)
- 13. 基於概率的分支預測器
- 14. 如何預測類的概率?
- 15. python邏輯迴歸,將預測的概率和預測保存到csv
- 16. 預測錯誤 - ROCR包(使用概率)
- 17. 獲取跨驗證概率預測
- 18. 如何預測概率限制
- 19. 在Spark中預測類概率RandomForestClassifier
- 20. 如何計算負二項迴歸模型的預測概率?
- 21. 如何根據glm模型繪製變量的預測概率
- 22. 替換概率向量中的NA
- 23. 填充向量與概率計算
- 24. 如何預處理交易數據以預測購買概率?
- 25. 將概率向量添加回原始數據幀中R
- 26. 單元測試的概率
- 27. 如何評估預測概率的算法的有效性?
- 28. 來自predict.lrm的預測概率的置信區間
- 29. 使用預測類別的概率的ROC曲線
- 30. pymc python變化點檢測的小概率。零概率錯誤
其實只有'SVC'有'probability'標誌。大多數其他分類器或者有'predict_proba'或者他們沒有; 'SGDClassifier'有條件地基於其'loss'參數。 –