1. 程式人生 > >機器學習之分類問題的評估指標2---準確率、精確率、召回率以及F1值

機器學習之分類問題的評估指標2---準確率、精確率、召回率以及F1值

本節主要了解一下sklearn.metrics下計算準確率、精確率、召回率和F1值的函式以及對於多分類問題計算時的理解

1、sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
normalize:bool型值,預設為True;如果為False,則表示正確分類的樣本數

2、klearn.metrics.recall_score(y_true, y_pred, labels=None, pos_label=1,average=’binary’, sample_weight=None)
     klearn.metrics.precision_score(y_true, y_pred, labels=None, pos_label=1,average=’binary’, sample_weight=None) 
     klearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1,average=’binary’, sample_weight=None) 
labels:

多類問題時候的標籤集,可以去掉一些存在的標籤,比如忽略掉多數負樣例的多類平均值。
pos_label:str或int。如果是二分類,用於指定的類(0或1);如果是多分類或多標籤,通常會忽略,但如果設定pos_label=關心的類和average!=‘binary’時,則返回該標籤的分數。
average : string, [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]
                 當應用於多類或多標籤問題時,需要設定這些引數
                1)預設值為binary,計算指定的pos_label的結果,用於二分類問題
                2)None:返回每個類的分數
                3)micro:微平均---通過計算總的TP、FN和FP來計算指標(常用)

                4)macro:巨集平均---通過計算各個類的TP、FN和FP然後求平均來計算指標(不會考慮標籤的不平衡性)
                5)weighted:加權平均---按每個標籤的真實例項數來加權(考慮標籤不平衡問題,同時它可能導致F不在P和R之間)
                5)samples:計算每個例項的指標,並找出它們的平均值(僅對多標籤分類有意義)
返回值:如果average=None,返回一個float型的陣列,長度為標籤數目;否則返回一個float值

3、sklearn.metrics.fbeta_score(y_true, y_pred, beta, labels=None, pos_label=1, average=’binary’, sample_weight=None)
sklearn.metrics.precision_recall_fscore_support

(y_true, y_pred, beta=1.0, labels=None, pos_label=1, average=None, sample_weight=None)
比其它多了一個beta引數,主要用於調節P和R的重要性,預設為1,代表P和R同等重要。

下面看程式碼實現:

from sklearn.metrics import accuracy_score,recall_score,precision_score,f1_score,precision_recall_fscore_support

y_true = [0, 1, 2, 1, 1, 1, 2, 2]
y_pred = [0, 2, 1, 1, 0, 1, 2, 1]
print(accuracy_score(y_true, y_pred)) #0.5
print(accuracy_score(y_true, y_pred,normalize=False)) #4
#1)average=None計算每個類的分數
print(precision_score(y_true, y_pred, average=None)) 
print(recall_score(y_true, y_pred, average=None)) 
print(f1_score(y_true, y_pred, average=None)) 
print(fbeta_score(y_true, y_pred, beta=0.5,average='macro')) 
print(precision_recall_fscore_support(y_true, y_pred, average=None))
print(precision_recall_fscore_support(y_true, y_pred, beta=0.5,average='macro')) 

結果如下:
1)None:[ 0.5  0.5  0.5]                                          #1/2   2/4  1/2
                  [ 1.          0.5         0.33333333]               #1/1   2/4  1/3
                  [ 0.66666667  0.5         0.4       ]             
                 (array([ 0.5,  0.5,  0.5]), array([ 1.        ,  0.5       ,  0.33333333]), array([ 0.66666667,  0.5       ,  0.4       ]), array([1, 4, 3], dtype=int64))
2)‘micro’:0.5                                                         #4/8
                   0.5                                                         #4/8
                   0.5                                                         #2*0.5*0.5/(0.5+0.5)
                   (0.5, 0.5, 0.5, None)

3)'macro':0.5                                                       #(1/2+2/4+1/2)/3
                    0.611111111111                                  #(1/1+2/4+1/3)/3
                    0.522222222222                                  #[(2*0.5*1/1.5)+(2*0.5*0.5/1)+(2*0.5*0.3/0.8)]/3
                    (0.5, 0.61111111111111105, 0.50336700336700335, None)    
                    (0.5, 0.61111111111111105, 0.52222222222222214, None)
                    (0.5, 0.61111111111111105, 0.50336700336700335, None)    
                    #F1=[(1.25*0.5*1/(0.25*0.5+1))+(1.25*0.5*0.5/(0.25*0.5+0.5))+(1.25*0.5*0.3)/(0.25*0.5+0.3)]/3

4)'weighted':0.5                                                   #[(1/2*1)+(2/4*4)+(1/2*3)]/8
                        0.5                                                    #[(1/1*1)+(2/4*4)+(1/3*3)]/8
                        0.483333333333                              #[(2*0.5*1/1.5)*1+(2*0.5*0.5/1)*4+(2*0.5*0.3/0.8)*3]/8
                       (0.5, 0.5, 0.48333333333333334, None)    

5)'samples' :主要解決多標籤問題,這部分有時間再補充!

對多類問題,可能需要去除'Negative Class';同理,在做巨集平均運算時,即使有些標籤在樣本中並不存在,但還是要參與計算。

y_true = [0, 1, 2, 1, 1, 1, 2, 2, 3]
y_pred = [0, 2, 1, 1, 0, 1, 2, 1, 0]
print(recall_score(y_true, y_pred, labels=[1, 2, 3], average='micro'))
print(precision_score(y_true, y_pred, labels=[0, 1, 2, 3], average='macro'))

結果為:0.375                     #3/8
              0.333333333333   #(1/3+2/4+1/2)/4

相關推薦

機器學習分類問題的評估指標2---準確率精確召回以及F1

本節主要了解一下sklearn.metrics下計算準確率、精確率、召回率和F1值的函式以及對於多分類問題計算時的理解 1、sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weigh

機器學習分類(Classification) 精確準確率召回

在機器學習中,模型評估涉及許多方法和名次,在此將其彙總一下,方便以後溫習。一 分類 (Classification):真假與正類負類a.  真正例(TP) 是指模型將正類別樣本正確地預測為正類別。b.  真負例(TN) 是指模型將負類別樣本正確地預測為負類別。c.   假正例

機器學習分類問題實戰(基於UCI Bank Marketing Dataset)

表示 般的 機構 文件 cnblogs opened csv文件 mas htm 導讀: 分類問題是機器學習應用中的常見問題,而二分類問題是其中的典型,例如垃圾郵件的識別。本文基於UCI機器學習數據庫中的銀行營銷數據集,從對數據集進行探索,數據預處理和特征工程,到學習

衡量機器學習模型的三大指標準確率精度和召回

美國 ext 另一個 IE blank 進行 style 監測 最好 連接來源:http://mp.weixin.qq.com/s/rXX0Edo8jU3kjUUfJhnyGw   傾向於使用準確率,是因為熟悉它的定義,而不是因為它是評估模型的最佳工具! 精度(查準率)和

機器學習分類和迴歸區別闡述

很多人分不清楚分類和迴歸,我來講一下,我們經常會碰到這樣的問題: 1、如何將信用卡申請人分為低、中、高風險群? 2、如何預測哪些顧客在未來半年內會取消該公司服務,哪些電話使用者會申請增值服務? 3、如何預測具有某些特徵的顧客是否會購買一臺新的計算機? 4、如何預測病人應當接受三種

機器學習分類決策樹DecisionTreeClassifier

機器學習之分類決策樹DecisionTreeClassifier # -*- coding: utf-8 -*- """ Created on Fri Nov 23 21:06:54 2018 @author: muli """ import numpy as np

機器學習常見模型評估指標

1.單值評估指標     在機器學習或深度學習中,為了評估最終模型的好壞,我們經常會引入各種評估指標,為了便於指標的說明,我們這裡具一個例子作為說明。假設我們想要建立一個垃圾郵件的分類模型,此時,模型預測結果的混淆矩陣如下表所示: 此時,我們常用的評估指標就有如下:

機器學習模型評估與引數調優

一、流水線工作流        在利用訓練資料對模型進行擬合時已經得到一些引數,使用流水線可以避免在將模型用於新資料時重新設定這些引數。利用sklearn中的Pipline類,使得我們可以擬合出包含任意多個處理步驟的模型,並將模型用於新資料的預測。 1. # Title

【深度學習-機器學習分類度量指標 : 正確率召回靈敏度特異度,ROC曲線AUC等

在分類任務中,人們總是喜歡基於錯誤率來衡量分類器任務的成功程度。錯誤率指的是在所有測試樣例中錯分的樣例比例。實際上,這樣的度量錯誤掩蓋了樣例如何被分錯的事實。在機器學習中,有一個普遍適用的稱為混淆矩陣(confusion matrix)的工具,它可以幫助人們更好地瞭解

AI工程師成長路--機器學習模型評估與選擇

開篇簡介:本文是博主結合前輩經驗和自身的認識寫的博文,有不少博主自身理解還不太透徹,因為考慮到文章的完整性,有些部分需要引用的前輩的一些方法,望諒解。由於文章專業化內容過多,會影響閱讀體驗,在這裡建議大家難以理解的部分先不要去深究,等待需要用到的時候再去深入研究一下。本博

機器學習效能度量指標

機器學習的模型效能度量指標 在機器學習中,衡量,評估和選擇一個模型好壞是通過一些常見指標實現的,稱之為效能指標(Metrics)。 對於一個二分類問題,我們首先給出如下基本指標基於這些指標可以推匯出其他指標: :True Positive(真正, TP),即模型預測為正的正樣本個數

機器學習模型評估(還是沒搞定...)

任務介紹 1.任務:預測貸款使用者是否會逾期 2.status是標籤:0表示未逾期,1表示逾期 【任務四:模型評估】記錄五個模型關於precision,rescore,f1,auc,roc的評分表格,畫出auc和roc曲線圖。 模型 Precesion

機器學習分類問題的效能度量

機器學習之分類問題的效能度量 # -*- coding: utf-8 -*- """ Created on Mon Dec 10 10:54:09 2018 @author: muli """ from sklearn.metrics import accuracy

機器學習分類迴歸樹CART

CART:Classification and regression tree,分類與迴歸樹。(是二叉樹) CART是決策樹的一種,主要由特徵選擇,樹的生成和剪枝三部分組成。它主要用來處理分類和迴歸問題,下面對分別對其進行介紹。 1、迴歸樹:使用平方誤差最小準則

基於Python的機器學習分類學習

所有的資料集都可以從sklearn.datasets中獲得 在評估時,一般使用F1指標,即使用了調和平均數,除了具備平均功能,還會對那些召回率和精血率更加接近的模型給予更高的分數。 分類學習 線性分類器(Linear Classifiers) 線性分類器通過累加計算每

機器學習分類

運動狀態的程式編寫 # -*- coding: utf-8 -*- """ Created on Sun Apr 15 14:20:53 2018 @author: Administrator """ import pandas as pd import numpy as np # 從sklea

機器學習分類器的進階

專案中我用到的分類器是隨機森林。  理解隨機森林,我先po一篇論文。George Vosselman教授的  http://www.sciencedirect.com/science/article/pii/S0924271616306207  這裡面用到的分類器是CRF以

機器學習分類器——Matlab中各種分類器的使用總結(隨機森林支援向量機K近鄰分類樸素貝葉斯等)

      Matlab中常用的分類器有隨機森林分類器、支援向量機(SVM)、K近鄰分類器、樸素貝葉斯、整合學習方法和鑑別分析分類器等。各分類器的相關Matlab函式使用方法如下:首先對以下介紹中所用到的一些變數做統一的說明:    train_data——訓練樣本,矩陣的每

機器學習十一 評估指標

評估指標(Evaluation Metrics) 選擇合適的指標 在構建機器學習模型的時候,首先要選擇效能指標,然後測試模型的表現如何。 相關的指標有多個,具體取決於我們要解決的問題。 在可以選擇效能指標之前,首先要認識到機器學習研究的是如何學習根據資料進行預測。 在測

Spark機器學習分類與迴歸

本頁面介紹了分類和迴歸的演算法。 它還包括討論特定類別的演算法的部分,如線性方法,樹和集合體。 目錄 分類 Classification -----------邏輯迴歸 Logistic regression -------------------二項式邏輯迴