sklearn的predict_proba使用說(shuō)明
發(fā)現(xiàn)個(gè)很有用的方法——predict_proba
今天在做數(shù)據(jù)預(yù)測(cè)的時(shí)候用到了,感覺(jué)很不錯(cuò),所以記錄分享一下,以后可能會(huì)經(jīng)常用到。
我的理解:predict_proba不同于predict,它返回的預(yù)測(cè)值為,獲得所有結(jié)果的概率。(有多少個(gè)分類(lèi)結(jié)果,每行就有多少個(gè)概率,以至于它對(duì)每個(gè)結(jié)果都有一個(gè)可能,如0、1就有兩個(gè)概率)
舉例:
獲取數(shù)據(jù)及預(yù)測(cè)代碼:
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)
訓(xùn)練數(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]]
訓(xùn)練結(jié)果,與訓(xùn)練數(shù)據(jù)一一對(duì)應(yīng):
[1 1 1 0 1 1 0 0 0 1]
測(cè)試數(shù)據(jù):
[[4 3 0] #測(cè)試數(shù)據(jù) [3 0 4] [2 9 5] [2 8 5]]
測(cè)試結(jié)果,與測(cè)試數(shù)據(jù)一一對(duì)應(yīng):
[[0.48753831 0.51246169] [0.58182694 0.41817306] [0.85361393 0.14638607] [0.57018655 0.42981345]]
可以看出,有四行兩列,每行對(duì)應(yīng)一條預(yù)測(cè)數(shù)據(jù),兩列分別對(duì)應(yīng) 對(duì)于0、1的預(yù)測(cè)概率(左邊概率大于0.5則為0,反之為1)
我們來(lái)看看使用predict方法獲得的結(jié)果:
test_y = model.predict(test_X)
print(test_y)
輸出結(jié)果:[1,0,0,0]
所以有的情況下predict_proba還是很有用的,它可以獲得對(duì)每種可能結(jié)果的概率,使用predict則是直接獲得唯一的預(yù)測(cè)結(jié)果,所以在使用的時(shí)候,應(yīng)該靈活使用。
補(bǔ)充一個(gè)知識(shí)點(diǎn):關(guān)于預(yù)測(cè)結(jié)果標(biāo)簽如何與原來(lái)標(biāo)簽相對(duì)應(yīng)
predict_proba返回所有標(biāo)簽值可能性概率值,這些值是如何排序的呢?
返回模型中每個(gè)類(lèi)的樣本概率,其中類(lèi)按類(lèi)self.classes_進(jìn)行排序。
其中關(guān)鍵的步驟為numpy的unique方法,即通過(guò)np.unique(Label)方法,對(duì)Label中的所有標(biāo)簽值進(jìn)行從小到大的去重排序。得到一個(gè)從小到大唯一值的排序。這也就對(duì)應(yīng)于predict_proba的行返回結(jié)果。
補(bǔ)充知識(shí): 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))
'''
對(duì)于n分類(lèi),會(huì)有n個(gè)分類(lèi)器,然后,任意兩個(gè)分類(lèi)器都可以算出一個(gè)分類(lèi)界面,這樣,用decision_function()時(shí),對(duì)于任意一個(gè)樣例,就會(huì)有n*(n-1)/2個(gè)值。
任意兩個(gè)分類(lèi)器可以算出一個(gè)分類(lèi)界面,然后這個(gè)值就是距離分類(lèi)界面的距離。
我想,這個(gè)函數(shù)是為了統(tǒng)計(jì)畫(huà)圖,對(duì)于二分類(lèi)時(shí)最明顯,用來(lái)統(tǒng)計(jì)每個(gè)點(diǎn)離超平面有多遠(yuǎn),為了在空間中直觀(guān)的表示數(shù)據(jù)以及畫(huà)超平面還有間隔平面等。
decision_function_shape="ovr"時(shí)是4個(gè)值,為ovo時(shí)是6個(gè)值。
'''
print(clf.predict(X))
clf.predict_proba(X) #這個(gè)是得分,每個(gè)分類(lèi)器的得分,取最大得分對(duì)應(yīng)的類(lèi)。
#畫(huà)圖
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()]) #對(duì)坐標(biāo)風(fēng)格上的點(diǎn)進(jìn)行預(yù)測(cè),來(lái)畫(huà)分界面。其實(shí)最終看到的類(lèi)的分界線(xiàn)就是分界面的邊界線(xiàn)。
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,兩個(gè)類(lèi)
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使用說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 運(yùn)行python提示no module named sklearn的解決方法
- python安裝sklearn模塊的方法詳解
- python3.6中anaconda安裝sklearn踩坑實(shí)錄
- 解決Pycharm 中遇到Unresolved reference ''sklearn''的問(wèn)題
- Python sklearn中的.fit與.predict的用法說(shuō)明
- python中sklearn的pipeline模塊實(shí)例詳解
- Python數(shù)據(jù)分析matplotlib設(shè)置多個(gè)子圖的間距方法
- 分享一下Python數(shù)據(jù)分析常用的8款工具
- python數(shù)據(jù)分析之用sklearn預(yù)測(cè)糖尿病
相關(guān)文章
Python中l(wèi)ist列表添加元素的3種方法總結(jié)
這篇文章主要介紹了Python中l(wèi)ist列表添加元素的3種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Python 搭建Web站點(diǎn)之Web服務(wù)器網(wǎng)關(guān)接口
本文是Python 搭建Web站點(diǎn)系列文章的第二篇,接上文,主要給大家來(lái)講述Web服務(wù)器網(wǎng)關(guān)接口WSGI的相關(guān)資料,非常詳細(xì),有需要的小伙伴可以參考下2016-11-11
Python實(shí)現(xiàn)刪除列表中滿(mǎn)足一定條件的元素示例
這篇文章主要介紹了Python實(shí)現(xiàn)刪除列表中滿(mǎn)足一定條件的元素,結(jié)合具體實(shí)例形式對(duì)比分析了Python針對(duì)列表元素的遍歷、復(fù)制、刪除等相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
python Protobuf定義消息類(lèi)型知識(shí)點(diǎn)講解
在本篇文章里小編給大家整理的是一篇關(guān)于python Protobuf定義消息類(lèi)型知識(shí)點(diǎn)講解,有興趣的朋友們可以學(xué)習(xí)下。2021-03-03
Python基于gevent實(shí)現(xiàn)高并發(fā)代碼實(shí)例
這篇文章主要介紹了Python基于gevent實(shí)現(xiàn)高并發(fā)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
對(duì)Python Class之間函數(shù)的調(diào)用關(guān)系詳解
今天小編就為大家分享一篇對(duì)Python Class之間函數(shù)的調(diào)用關(guān)系詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python利用tkinter和socket實(shí)現(xiàn)端口掃描
這篇文章主要為大家詳細(xì)介紹了Python如何利用tkinter和socket實(shí)現(xiàn)端口掃描功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-12-12

