于營,楊婷婷,楊博雄
(1.三亞學(xué)院信息與智能工程學(xué)院,三亞572011;2.三亞學(xué)院陳國良院士創(chuàng)新中心,三亞572011)
在計(jì)算機(jī)視覺中,對(duì)象檢測(cè)即在圖像中定位一個(gè)或多個(gè)目標(biāo)。除了傳統(tǒng)的對(duì)象檢測(cè)技術(shù)外,R-CNN和YOLO(You Only Look Once,一種先進(jìn)的實(shí)時(shí)目標(biāo)檢測(cè)系統(tǒng))等先進(jìn)的深度學(xué)習(xí)模型,可以對(duì)不同類型的目標(biāo)實(shí)現(xiàn)較為精準(zhǔn)的檢測(cè)。在這些模型中輸入圖像,將會(huì)返回每個(gè)檢測(cè)到的對(duì)象周圍的邊界框的坐標(biāo)。
二元分類(Binary classification),又稱“二向分類”。在包含兩類事項(xiàng)的比較研究中,按兩個(gè)標(biāo)識(shí)所作的分類,標(biāo)識(shí)常記作1和0,或正和負(fù),或惡性與良性(如問題與癌癥分類有關(guān)),或成功與失?。ㄈ鐚W(xué)生考試成績(jī)的分類)。
假設(shè)存在一個(gè)帶有正負(fù)兩類的二元分類問題。用于訓(xùn)練模型的7個(gè)樣本的標(biāo)簽記作:[positive,negative,positive,negative,positive,positive,negative]。當(dāng)將這些樣本提供給模型時(shí),模型不一定返回類標(biāo)簽,而是返回分?jǐn)?shù)。例如,當(dāng)將這7個(gè)樣本提供給模型時(shí),它們的類別得分可能為:[0.6,0.2,0.55,0.7,0.4,0.9,0.5]。用戶可以針對(duì)這些得分設(shè)置閾值,從而使每個(gè)樣本賦予類標(biāo)簽。閾值即模型的超參數(shù),設(shè)本例中閾值是0.6,然后任何高于或等于0.6的樣本都會(huì)被賦予正標(biāo)簽,否則賦予負(fù)標(biāo)簽。則可以得到樣本的預(yù)測(cè)標(biāo)簽為:[positive(0.6),negative(0.2),negative(0.55),positive(0.9),negative(0.4),positive(0.8),negative(0.5)]。
為提取模型性能的更多信息,可以使用混淆矩陣?;煜仃囉兄谖覀?cè)趨^(qū)分兩個(gè)類別時(shí)鑒別模型是否“混淆”。圖1是一個(gè)2×2矩陣,兩行和兩列的標(biāo)簽分別為正向和負(fù)向。行標(biāo)簽代表真實(shí)值標(biāo)簽,而列標(biāo)簽代表預(yù)測(cè)值標(biāo)簽。
圖1 二元分類混淆矩陣
矩陣的4個(gè)元素(紅色和綠色項(xiàng)目)表示計(jì)算模型正確和不正確預(yù)測(cè)數(shù)的4個(gè)指標(biāo)。紅色項(xiàng)目代表預(yù)測(cè)正確,即預(yù)測(cè)標(biāo)簽和真實(shí)標(biāo)簽匹配;綠色項(xiàng)目代表預(yù)測(cè)不正確,即預(yù)測(cè)標(biāo)簽和真實(shí)標(biāo)簽不匹配。目標(biāo)是最大限度地利用“真”值(真正例和真負(fù)例)來衡量指標(biāo),并最大限度地減少其他兩個(gè)指標(biāo)(假正例和假負(fù)例)。因此,混淆矩陣中的四個(gè)指標(biāo)是:
●左上(真正例):模型將真樣本正確地分類為Positive的次數(shù)是多少?
●右上(假負(fù)例):模型將真樣本錯(cuò)誤地分類為Negative的次數(shù)是多少?
●左下(假正例):模型將假樣本錯(cuò)誤地分類為Positive的次數(shù)是多少?
●右下(真負(fù)例):模型將假樣本正確地分類為Negative的次數(shù)是多少?
為前面的7個(gè)樣本計(jì)算這4個(gè)指標(biāo),得到混淆矩陣如圖2所示。
圖2 分類結(jié)果
這就是針對(duì)二元分類問題計(jì)算混淆矩陣的方法。
假設(shè)有9個(gè)樣本,每個(gè)樣本屬于3個(gè)類別之一:白色、黑色或紅色。以下是9個(gè)樣本的真實(shí)數(shù)據(jù):Red,Black,Red,White,Black,Red,Black,Red,White。當(dāng)樣品被輸入模型時(shí),得到預(yù)測(cè)的標(biāo)簽為:White,Black,Red,White,Red,Black,White,Red,Red。
為了便于比較,并列記錄如表1所示。
表1
在計(jì)算混淆矩陣之前,必須指定目標(biāo)類。假設(shè)將紅色類設(shè)定為目標(biāo)。此類標(biāo)記為“正”,所有其他類標(biāo)記為“負(fù)”。則表1被標(biāo)記為表2。
表2
問題再次被轉(zhuǎn)化為正負(fù)兩個(gè)類,可以按照二元分類來計(jì)算混淆矩陣。
同理,可得目標(biāo)為白色類和黑色類的混淆矩陣,如圖4、圖5所示。
圖4 白色類的混淆矩陣
圖5 黑色類的混淆矩陣
Scikit-learn庫中的模塊metrics可用于計(jì)算混淆矩陣中的指標(biāo)。
對(duì)于二元分類問題,使用confusion_matrix()函數(shù)及其以下兩個(gè)參數(shù):
圖3 紅色類的混淆矩陣
●y_true:真實(shí)標(biāo)簽。
●y_pred:預(yù)測(cè)的標(biāo)簽。
以下代碼計(jì)算了1.1小節(jié)的二元分類示例的混淆矩陣。
要計(jì)算多類分類問題的混淆矩陣,使用multilabel_confusion_matrix()函數(shù),除y_true和y_pred參數(shù)外,使用labels參數(shù)接受類標(biāo)簽的列表。
Multilabel_confusion_matrix()函數(shù)為每個(gè)類計(jì)算混淆矩陣,并返回所有矩陣。矩陣的順序與labels參數(shù)中的標(biāo)簽順序匹配,可以使用numpy.flip()函數(shù)調(diào)整矩陣中元素的順序。
準(zhǔn)確性通常描述模型在所有類別上的表現(xiàn),用于當(dāng)所有類別都同等重要的情況,表示正確預(yù)測(cè)數(shù)與預(yù)測(cè)總數(shù)之間的比率。
基于先前計(jì)算的混淆矩陣,使用Scikit-learn計(jì)算準(zhǔn)確性的方法。變量acc為真正值和假負(fù)值之和除以矩陣中所有值之和的結(jié)果。結(jié)果為0.5714,這意味著該模型進(jìn)行正確的預(yù)測(cè)時(shí)準(zhǔn)確性為57.14%。
需要注意的是,準(zhǔn)確性可能具有欺騙性。例如,數(shù)據(jù)不平衡時(shí),假設(shè)總共有600個(gè)樣本,其中550個(gè)屬于“正”類別,而只有50個(gè)屬于“負(fù)”類別。由于大多數(shù)樣本屬于一個(gè)類別,因此該類別的準(zhǔn)確性將高于另一個(gè)類別。
精確度是正確分類為正樣本的數(shù)量與分類為正樣本(正確或不正確)的樣本總數(shù)之間的比率。精確度衡量模型將樣品分類為陽性的準(zhǔn)確性。
當(dāng)模型做出許多錯(cuò)誤的正分類,即“假正例”比較多時(shí),代表分母增大,使得精確度變小。在以下情況下,模型得精確度比較高:
●該模型使許多正確的正分類(最大化真正的正)
●該模型使不正確的正分類更少(盡量減少誤報(bào))精確度反映了模型將樣品分類為陽性樣本時(shí)有多可靠。在Scikit-learn中,sklearn.metrics模塊具有一個(gè)名為precision_score()的函數(shù),該函數(shù)接受樣本信息和預(yù)測(cè)的標(biāo)簽并返回精度。pos_label參數(shù)接受positive類的標(biāo)簽,默認(rèn)值為1。
表示模型的精確度為66.67%。
召回率衡量模型檢測(cè)陽性樣品的能力,計(jì)算方法是正確分類為True的正樣本數(shù)與正樣本總數(shù)之間的比率。召回率越高,檢測(cè)到的陽性樣本越多。
召回率僅關(guān)注陽性樣本的分類方式,與陰性樣品的分類方式無關(guān)。當(dāng)模型將所有正樣本歸為正樣本時(shí),即使所有負(fù)樣本均被錯(cuò)誤分類為正樣本,召回率也將為100%。
類似于precision_score()函數(shù),sklearn.metrics模塊中的callback_score()函數(shù)計(jì)算召回率。代碼如下:
表示模型的召回率為50%。
本文討論了混淆矩陣以及如何在二元和多類分類問題中計(jì)算“真正例”、“真負(fù)例”、“假正例”和“假負(fù)例”4個(gè)指標(biāo),使用Scikit-learn中的metrics模塊實(shí)現(xiàn)了在Python中計(jì)算混淆矩陣的方法。進(jìn)一步,使用sklearn.metrics模塊分別進(jìn)行計(jì)算模型的準(zhǔn)確性、準(zhǔn)確度和召回率。