我就廢話不多說了,大家還是直接看代碼吧~
補充知識:sklearn中調用某個機器學習模型model.predict(x)和model.predict_proba(x)的區別
model.predict_proba(x)不同于model.predict(),它返回的預測值為獲得所有結果的概率。(有多少個分類結果,每行就有多少個概率,對每個結果都有一個概率值,如0、1兩分類就有兩個概率)
我們直接上代碼,通過具體例子來進一步講解:
python3 代碼實現:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# -*- coding: utf-8 -*- """ Created on Sat Jul 27 21:25:39 2019 @author: ZQQ """ from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from xgboost import XGBClassifier import numpy as np import warnings warnings.filterwarnings( "ignore" ) # 這個方法只是解決了表面,沒有根治 # 數據(特征,屬性) x_train = np.array([[ 1 , 2 , 3 ], [ 1 , 5 , 4 ], [ 2 , 2 , 2 ], [ 4 , 5 , 6 ], [ 3 , 5 , 4 ], [ 1 , 7 , 2 ]]) # 數據的標簽 y_train = np.array([ 1 , 0 , 1 , 1 , 0 , 0 ]) # 測試數據 x_test = np.array([[ 2 , 1 , 2 ], [ 3 , 2 , 6 ], [ 2 , 6 , 4 ]]) # 導入模型 model = LogisticRegression() #model = RandomForestClassifier() #model=XGBClassifier() model.fit(x_train, y_train) # 返回預測標簽 print (model.predict(x_test)) print ( '---------------------------------------' ) # 返回預測屬于某標簽的概率 print (model.predict_proba(x_test)) |
運行結果:
分析結果:
使用model.predict() :
預測[2,1,2]為1類
預測[3,2,6]為1類
預測[2,6,4]為0類
使用model.predict_proba() :
預測[2,1,2]的標簽是0的概率為0.19442289,1的概率為0.80557711
預測[3,2,6]的標簽是0的概率為0.04163615,1的概率為0.95836385
預測[2,6,4]的標簽是0的概率為0.83059324,1的概率為0.16940676
預測為0類的概率值和預測為1的概率值和為1
同理,如果標簽繼續增加,3類:0,1, 2
預測為0類的概率值:a
預測為1類的概率值:b
預測為2類的概率值:c
預測出來的概率值的和a+b+c=1
注:model.predict_proba()返回所有標簽值可能性概率值,這些值是如何排序的呢?
返回模型中每個類的樣本概率,其中類按類self.classes_進行排序。
通過numpy.unique(label)方法,對label中的所有標簽值進行從小到大的去重排序。
得到一個從小到大唯一值的排序。這也就對應于model.predict_proba()的行返回結果。
以上這篇Python sklearn中的.fit與.predict的用法說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/helloworld0906/article/details/103214002