您好,登錄后才能下訂單哦!
這篇文章主要介紹sklearn的predict_proba是什么,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
發(fā)現(xiàn)個很有用的方法——predict_proba
今天在做數(shù)據(jù)預測的時候用到了,感覺很不錯,所以記錄分享一下,以后可能會經(jīng)常用到。
我的理解:predict_proba不同于predict,它返回的預測值為,獲得所有結(jié)果的概率。(有多少個分類結(jié)果,每行就有多少個概率,以至于它對每個結(jié)果都有一個可能,如0、1就有兩個概率)
舉例:
獲取數(shù)據(jù)及預測代碼:
from sklearn.linear_model import LogisticRegression import numpy as np train_X = np.array(np.random.randint(0,10,size=30).reshape(10,3)) train_y = np.array(np.random.randint(0,2,size=10)) test_X = np.array(np.random.randint(0,10,size=12).reshape(4,3)) model = LogisticRegression() model.fit(train_X,train_y) test_y = model.predict_proba(test_X) print(train_X) print(train_y) print(test_y)
訓練數(shù)據(jù)
[[2 9 8] [0 8 5] [7 1 2] [8 4 6] [8 8 3] [7 2 7] [6 4 3] [1 4 4] [1 9 3] [3 4 7]]
訓練結(jié)果,與訓練數(shù)據(jù)一一對應(yīng):
[1 1 1 0 1 1 0 0 0 1]
測試數(shù)據(jù):
[[4 3 0] #測試數(shù)據(jù) [3 0 4] [2 9 5] [2 8 5]]
測試結(jié)果,與測試數(shù)據(jù)一一對應(yīng):
[[0.48753831 0.51246169] [0.58182694 0.41817306] [0.85361393 0.14638607] [0.57018655 0.42981345]]
可以看出,有四行兩列,每行對應(yīng)一條預測數(shù)據(jù),兩列分別對應(yīng) 對于0、1的預測概率(左邊概率大于0.5則為0,反之為1)
我們來看看使用predict方法獲得的結(jié)果:
test_y = model.predict(test_X)
print(test_y)
輸出結(jié)果:[1,0,0,0]
所以有的情況下predict_proba還是很有用的,它可以獲得對每種可能結(jié)果的概率,使用predict則是直接獲得唯一的預測結(jié)果,所以在使用的時候,應(yīng)該靈活使用。
補充一個知識點:關(guān)于預測結(jié)果標簽如何與原來標簽相對應(yīng)
predict_proba返回所有標簽值可能性概率值,這些值是如何排序的呢?
返回模型中每個類的樣本概率,其中類按類self.classes_進行排序。
其中關(guān)鍵的步驟為numpy的unique方法,即通過np.unique(Label)方法,對Label中的所有標簽值進行從小到大的去重排序。得到一個從小到大唯一值的排序。這也就對應(yīng)于predict_proba的行返回結(jié)果。
補充知識: python sklearn decision_function、predict_proba、predict
看代碼~
import matplotlib.pyplot as plt import numpy as np from sklearn.svm import SVC X = np.array([[-1,-1],[-2,-1],[1,1],[2,1],[-1,1],[-1,2],[1,-1],[1,-2]]) y = np.array([0,0,1,1,2,2,3,3]) # y=np.array([1,1,2,2,3,3,4,4]) # clf = SVC(decision_function_shape="ovr",probability=True) clf = SVC(probability=True) clf.fit(X, y) print(clf.decision_function(X)) ''' 對于n分類,會有n個分類器,然后,任意兩個分類器都可以算出一個分類界面,這樣,用decision_function()時,對于任意一個樣例,就會有n*(n-1)/2個值。 任意兩個分類器可以算出一個分類界面,然后這個值就是距離分類界面的距離。 我想,這個函數(shù)是為了統(tǒng)計畫圖,對于二分類時最明顯,用來統(tǒng)計每個點離超平面有多遠,為了在空間中直觀的表示數(shù)據(jù)以及畫超平面還有間隔平面等。 decision_function_shape="ovr"時是4個值,為ovo時是6個值。 ''' print(clf.predict(X)) clf.predict_proba(X) #這個是得分,每個分類器的得分,取最大得分對應(yīng)的類。 #畫圖 plot_step=0.02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step), np.arange(y_min, y_max, plot_step)) Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) #對坐標風格上的點進行預測,來畫分界面。其實最終看到的類的分界線就是分界面的邊界線。 Z = Z.reshape(xx.shape) cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired) plt.axis("tight") class_names="ABCD" plot_colors="rybg" for i, n, c in zip(range(4), class_names, plot_colors): idx = np.where(y == i) #i為0或者1,兩個類 plt.scatter(X[idx, 0], X[idx, 1], c=c, cmap=plt.cm.Paired, label="Class %s" % n) plt.xlim(x_min, x_max) plt.ylim(y_min, y_max) plt.legend(loc='upper right') plt.xlabel('x') plt.ylabel('y') plt.title('Decision Boundary') plt.show()
以上是sklearn的predict_proba是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。