Most其他答案集中在不平衡類的示例上。是的,這很重要。但是,我認為即使對於平衡的類,準確性也是有問題的。
弗蘭克·哈雷爾(Frank Harrell)在他的博客上寫過:分類與預測和由分類準確性和其他不連續的不正確準確性評分規則導致的損壞 >。
從本質上講,他的論據是,當您為新樣本的每個類別輸出概率時,練習的統計組成部分結束。通過選擇閾值進行分類,將這些預測概率 $(\ hat {p},1- \ hat {p})$ span>映射為0-1分類1比0的新觀察值不再是統計的一部分。它是 decision 組件的一部分。在這裡,您需要模型的概率輸出-還需要考慮以下因素:
根據您決定的後果,您將使用其他閾值來做出決定。如果採取的是侵入性手術,則與推薦兩種阿司匹林相比,將患者分類為患有某種疾病的可能性要高得多。或者,您可能甚至會有 3 個不同的決定,儘管只有兩個類(患病或健康):“回家,別擔心”與“進行另一項測試”因為我們擁有的尚無定論”與“立即操作”。
評估預測概率的正確方法 $(\ hat {p},1- \ hat {p})$ span>是 not 將它們與閾值進行比較,根據閾值將它們映射到 $(0,1)$ span>,然後評估轉換後的 $(0,1)$ span>分類。相反,應該使用適當的得分規則。這些是將預測概率和相應觀察到的結果映射到損失值的損失函數,這些損失在期望中通過真實概率 $(p,1-p)$ span>最小化。想法是,我們將對多個(最佳:許多)觀察到的結果進行評估的評分規則的平均值以及相應的預測班級成員資格概率作為對評分規則期望的估計。
請注意,此處的“正確”具有精確定義的含義-有不正確的評分規則以及正確的評分規則,最後是嚴格正確的評分規則。 評分規則本身就是預測密度和結果的損失函數。 正確的評分規則是在預測密度為真實密度的情況下,期望值最小的評分規則。 嚴格正確的評分規則是僅在預測密度為真實密度的情況下將 期望值最小化的評分規則。
弗蘭克·哈雷爾(Frank Harrell)指出,準確性是不正確的評分規則。 (更準確地說,精度甚至根本不是評分規則:請參見我的答案 在二進制分類設置中準確性是否是不正確的評分規則?)可以看到,例如,如果我們根本沒有任何預測變量,而只是翻轉了概率為 $(0.6,0.4)$ span>的不公平硬幣。如果我們將所有分類都歸為第一類,並且完全忽略任何結果可能屬於第二類的40%概率,則準確性將達到最高。 (這裡我們看到,即使對於平衡的類,準確性也是有問題的。)正確的得分規則將首選 $(0.6,0.4 )$ span>預測到期望的 $(1,0)$ span>之一。特別是,準確性在閾值中是不連續的:將閾值移動一點點可能會使一個(或多個)預測改變類別,並使整個準確性降低離散量。這沒有什麼意義。
更多信息可以在上面鏈接的Frank的兩個博客文章以及 Frank Harrell的回歸建模策略的第10章中找到。
(這是我的較早答案的無恥地抄寫。)
編輯。 我對示例的答案,當使用準確性作為結果度量會導致錯誤的結論時給出了一個有希望的示例,其中最大程度的準確性可能導致錯誤的決策類。
使用準確性時,我們將誤報和誤報的費用均等。當該數據集不平衡時-假設它在一類中有99%的實例,而另一類中只有1%的實例-有降低成本的好方法。預測每個實例都屬於多數類,準確度達到99%並儘早回家。
當我們分配給每個錯誤的實際成本不相等時,問題就開始了。如果我們處理的是罕見但致命的疾病,則無法診斷出患病者的疾病的成本要比讓健康人接受更多檢查的成本高得多。
通常,沒有一般的最佳措施。最佳方法來自您的需求。從某種意義上說,這不是機器學習問題,而是業務問題。通常,兩個人會使用相同的數據集,但由於目標不同而會選擇不同的指標。
精度是一個很好的指標。實際上,大多數指標都很出色,我喜歡評估許多指標。但是,有時您需要在使用模型A或模型B之間做出選擇。在那裡,您應該使用最適合您需求的單個指標。
要獲得額外的功勞,請在分析前選擇此指標,這樣您在做決定時就不會分心。
標準準確性定義為正確分類與完成分類的數量之比。
\開始{align *} 精度:= \ frac {\ text {正確的分類}} {\ text {分類數}} \ end {align *} span>
因此,這是所有課程的總體衡量標準,我們很快就會看到,告訴一個 甲骨文除了實際有用的測試。 oracle是返回隨機猜測的分類函數 對於每個樣品。同樣,我們希望能夠對分類函數的分類性能進行評分。如果我們每個班級有相同數量的樣本,但是如果我們準確性可以是一個有用的度量 樣本集不平衡的準確性根本沒有用。更重要的是,測試可以具有很高的準確性 但實際上要比精度較低的測試更差。
如果我們有一個樣本分佈,使得 $ 90 \%$ span>樣本屬於類 $ \ mathcal {A } $ span>, $ 5 \%$ span>屬於 $ \ mathcal {B} $ span>和另一個 $ 5 \%$ span>屬於 $ \ mathcal {C} $ span>,則以下分類函數將具有準確性的 $ 0.9 $ span>:
\開始{align *} classify(sample):= \ begin {cases} \ mathcal {A} & \ text {if} \ top \\ \ end {cases} \ end {align *} span>
但是,很明顯,因為我們知道 $ classify $ span>的工作原理,它無法告訴類 分開。同樣,我們可以構造一個分類函數
\開始{align *} classify(sample):= \ text {guess} \ begin {cases} \ mathcal {A} & \ text {with p} = 0.96 \\ \ mathcal {B} & \ text {with p} = 0.02 \\ \ mathcal {C} & \ text {with p} = 0.02 \\ \ end {cases} \ end {align *} span>
其準確度為 $ 0.96 \ cdot 0.9 + 0.02 \ cdot 0.05 \ cdot 2 = 0.866 $ span>,並且不會總是預測 $ \ mathcal {A} $ span>,但鑑於我們知道 $ classify $ span>的工作原理,很明顯它不能區分課程。 在這種情況下,準確性僅告訴我們分類函數在猜測方面有多好。這意味著 除了有用的測試之外,準確性不是告訴Oracle的好方法。
我們僅通過提供分類函數就可以分別計算每個類別的準確性 來自同一個類別的樣本,並記住併計算正確分類和錯誤分類的數量 然後分類計算 $ accuracy:= \ text {正確} /(\ text {正確} + \ text {不正確})$ span>。我們重複一遍 每堂課如果我們具有可以準確識別類別的分類功能 $ \ mathcal {A} $ span>,但將輸出其他類的隨機猜測,然後得出的準確度為 $ 1.00 $ span> $ \ mathcal {A} $ span>,其他類的精度為 $ 0.33 $ span>。這已經為我們提供了一種更好的方法 判斷我們分類功能的表現。一個總是猜測同一個類會產生的神諭 該類別的每個類別的準確性為 $ 1.00 $ span>,而其他類別的準確性為 $ 0.00 $ span>。如果我們的測試有用 每個類的所有精度應為 $ >0.5 $ span>。否則,我們的測試並不比偶然更好。但是,準確性 每個類別均不考慮誤報。即使我們的分類函數具有 $ 100 \%$ span>的準確性 對於類 $ \ mathcal {A} $ span>,對於 $ \ mathcal {A} $ span>也會出現誤報>(例如 $ \ mathcal {B} $ span>錯誤地 分類為 $ \ mathcal {A} $ span>)。
在醫學測試中,靈敏度定義為正確識別出患有疾病的人群之間的比例 以及實際患有這種疾病的人數。特異性定義為正確的人與人之間的比例 確定為健康的人和實際健康的人的數量。實際擁有的人數 該疾病是真實陽性測試結果的數量加上虛假陰性測試結果的數量。的 實際健康的人的數量是真實陰性測試結果的數量加上錯誤陽性的數量 試驗結果。
在二進制分類問題中,有兩個類 $ \ mathcal {P} $ span>和 $ \ mathcal {N} $ span>。 $ T_ {n} $ span>是指數字 正確識別出屬於 $ n $ span>和 $ F_ {n} $ span>類別的樣本樣品數 被錯誤地標識為屬於類 $ n $ span>的對象。在這種情況下,敏感性和特異性是 定義如下:
\開始{align *} 靈敏度:= \ frac {T _ {\ mathcal {P}}} {T _ {\ mathcal {P}} + F _ {\ mathcal {N}}} \\ 特異性:= \ frac {T _ {\ mathcal {N}}} {T _ {\ mathcal {N}} + F _ {\ mathcal {P}}} \ end {align *} span>
$ T _ {\ mathcal {P}} $ span>是真正的肯定 $ F _ {\ mathcal {N}} $ span>是誤報, $ T _ {\ mathcal {N}} $ span> 是真實的否定詞,而 $ F _ {\ mathcal {P}} $ span>是錯誤的肯定詞。但是,用術語思考 陰性和陽性都適合進行醫學檢查,但是為了獲得更好的直覺,我們不應該 從否定和肯定的角度思考,但在通用類 $ \ alpha $ span>和 $ \ beta $ span>中進行思考。那我們可以說 正確識別為屬於 $ \ alpha $ span>的樣本數量為 $ T _ {\ alpha} $ span>和樣品量 實際屬於 $ \ alpha $ span>的是 $ T _ {\ alpha} + F _ {\ beta} $ span> 。正確識別為不合格的樣品數量 屬於 $ \ alpha $ span>的是 $ T _ {\ beta} $ span>和實際上不屬於的樣本量到 $ \ alpha $ span>是 $ T _ {\ beta} + F _ {\ alpha} $ span>。這為我們提供了 $ \ alpha $ span>的敏感性和特異性,但我們也可以應用 與 $ \ beta $ span>類相同。正確識別為屬於 $ \ beta $ span>的樣本數量為 $ T _ {\ beta} $ span>和實際屬於 $ \ beta $ span>的樣本量為 $ T _ {\ beta} + F _ {\ alpha} $ span>。大量的 正確標識為不屬於 $ \ beta $ span>的樣本為 $ T _ {\ alpha} $ span>及其數量實際樣本數 不屬於 $ \ beta $ span>的是 $ T _ {\ alpha} + F _ {\ beta} $ span>。因此,我們得到了每個類別的敏感性和特異性:
\開始{align *} 敏感性_ {\ alpha}:= \ frac {T _ {\ alpha}} {T _ {\ alpha} + F _ {\ beta}} \\ 特異性_ {\ alpha}:= \ frac {T _ {\ beta}} {T _ {\ beta} + F _ {\ alpha}} \\ 敏感性_ {\ beta}:= \ frac {T _ {\ beta}} {T _ {\ beta} + F _ {\ alpha}} \\ 特異性_ {\ beta}:= \ frac {T _ {\ alpha}} {T _ {\ alpha} + F _ {\ beta}} \\ \ end {align *} span>
但是,我們發現 $靈敏度_ {\ alpha} =特異性_ {\ beta} $ span>和 $ specificity _ {\ alpha } =靈敏度_ {\ beta} $ span>。這意味著,如果我們只有兩個類別,則不需要每個類別的敏感性和特異性。
如果我們只有兩個類別,則每個類別的靈敏度和特異性都沒有用,但是我們可以將其擴展為 多個類別。敏感性和特異性定義為:
\開始{align *} \ text {靈敏度}:= \ frac {\ text {true肯定}} {\ text {true肯定} + \ text {false否定}} \\ \ text {specificity}:= \ frac {\ text {true negatives}} {\ text {true negatives} + \ text {false-positives}} \\ \ end {align *} span>
真正的肯定是 $ T_ {n} $ span>,錯誤的肯定是 $ \ sum_ {i} (F_ {n,i})$ span>和 誤報只是 $ \ sum_ {i}(F_ {i,n})$ span>。尋找真正的負面因素要困難得多,但是我們可以這樣說 如果我們正確地將某物歸類為與 $ n $ span>不同的類,則它算作真正的否定。 這意味著我們至少有 $ \ sum_ {i}(T_ {i})-T(n)$ span>真陰性。但是,這並非全部都是負面的。 與 $ n $ span>不同的類的所有錯誤分類也都是負數,因為它們正確 未被識別為屬於 $ n $ span>。 $ \ sum_ {i}(\ sum_ {k}(F_ {i,k}))$ span>代表所有錯誤的分類。 從中我們必須減去輸入類為 $ n $ span>的情況,這意味著我們必須減去 $的假陰性n $ span>,它是 $ \ sum_ {i}(F_ {n,i})$ span>,但我們還必須減去 $ n $ span>因為 它們是假陽性而不是假陰性,因此我們還必須減去 $ \ sum_ {i}(F_ {i,n})$ span>最終得出 $ \ sum_ {i}(T_ {i})-T(n)+ \ sum_ {i}(\ sum_ {k}(F_ {n,i}))-\ sum_ {i}(F_ {n,i})-\ sum_ {i}(F_ {i,n})$ span>。作為總結,我們有:
\開始{align *} \ text {真實肯定}:= T_ {n} \\ \ text {真否定}:= \ sum_ {i}(T_ {i})-T(n)+ \ sum_ {i}(\ sum_ {k}(F_ {n,i}))-\ sum_ {i }(F_ {n,i})-\ sum_ {i}(F_ {i,n})\\ \ text {假陽性}:= \ sum_ {i}(F_ {i,n})\\ \ text {假否定}:= \ sum_ {i}(F_ {n,i}) \ end {align *} span>
\開始{align *} 靈敏度(n):= \ frac {T_ {n}} {T_ {n} + \ sum_ {i}(F_ {n,i})} \\ 特異性(n):= \ frac {\ sum_ {i}(T_ {i})-T_ {n} + \ sum_ {i}(\ sum_ {k}(F_ {i,k}))-\ sum_ { i}(F_ {n,i})-\ sum_ {i}(F_ {i,n})} {\ sum_ {i}(T_ {i})-T_ {n} + \ sum_ {i}(\ sum_ {k}(F_ {i,k}))-\ sum_ {i}(F_ {n,i})} \ end {align *} span>
我們定義了一個 $ confidence ^ {\ top} $ span>,它用來衡量我們的自信程度 我們的分類功能的答复實際上是正確的。 $ T_ {n} + \ sum_ {i}(F_ {i,n})$ span>都是案例 其中分類函數用 $ n $ span>答复,但只有其中的 $ T_ {n} $ span>是正確的。因此,我們定義了
\開始{align *} 置信度^ {\ top}(n):= \ frac {T_ {n}} {T_ {n} + \ sum_ {i}(F_ {i,n})} \ end {align *} span>
但是我們還能定義一個 $ confidence ^ {\ bot} $ span>來衡量如果我們的 分類函數使用不同於 $ n $ span>的類來響應,它實際上不是 $ n $ span>嗎?
好吧,我們得到 $ \ sum_ {i}(\ sum_ {k}(F_ {i,k}))-\ sum_ {i}(F_ {i,n })+ \ sum_ {i}(T_ {i})-T_ {n} $ span>除 $ \ sum_ {i}(F_ {n ,i})$ span>。因此,我們定義了
\開始{align *} 置信度^ {\ bot}(n)= \ frac {\ sum_ {i}(\ sum_ {k}(F_ {i,k}))-\ sum_ {i}(F_ {i,n})+ \ sum_ {i}(T_ {i})-T_ {n}-\ sum_ {i}(F_ {n,i})} {\ sum_ {i}(\ sum_ {k}(F_ {i,k}))) -\ sum_ {i}(F_ {i,n})+ \ sum_ {i}(T_ {i})-T_ {n}} \ end {align *} span>
數據集中的不平衡類
簡而言之:想像一下,數據集中有一個類別(例如蘋果)的99%和另一個類別的1%(例如香蕉)。我的超級duper算法對該數據集的準確性達到了驚人的99%,請檢查一下:
返回“是蘋果”
他將在99%的時間內正確,因此獲得了99%的準確性。我可以賣給我我的算法嗎?
解決方案:不要使用絕對度量(準確性),而是使用相對於每個類的度量(那裡有很多東西,例如ROC AUC)
DaL的答案就是這樣。我將通過一個有關出售雞蛋的非常簡單的示例來說明這一點。
您擁有一個雞蛋店,您售出的每個雞蛋都會產生$ 2 $美元的淨收入。每個進入商店的顧客都可以買雞蛋,也可以不買雞蛋就離開。對於某些客戶,您可以決定打折,您只會獲得$ 1 $的收入,但客戶總是會購買。
您插入一個網絡攝像頭,該攝像頭使用諸如“嗅雞蛋”,“拿著一本煎蛋食譜”之類的功能來分析客戶行為,並將其分類為“想以$ 2 $美元購買”(正) “他只想以$ 1 $的價格購買”(負數),然後他就離開了。
如果您的分類器沒有記錯,那麼您將獲得可以預期的最大收益。如果不完美,則:
然後,分類器的準確度就是您離最大收益的距離。這是完美的措施。
但是現在如果折扣是$ a $美元。費用是:
然後,您需要使用這些數字加權的精度,以衡量分類器的效率。例如,如果$ a = 0.001 $,則度量完全不同。這種情況可能與數據不平衡有關:很少有客戶願意支付2美元,而大多數客戶願意支付0.001美元。您不必擔心會收到很多誤報,也不會再得到一些真實的肯定。您可以據此調整分類器的閾值。
例如,如果分類器要在數據庫中查找相關文檔,則可以將“閱讀無關文檔”所浪費的“時間”與查找相關文檔進行比較。
分類準確度是正確預測的數目除以預測的總數。
準確性可能會產生誤導。例如,在存在較大類別不平衡的問題中,模型可以針對所有預測來預測多數類別的值,並獲得較高的分類精度。因此,還需要進一步的性能指標,例如F1得分和Brier得分。
關於此事,我寫了整篇博客文章:
https://blog.ephorie.de/zeror-the-simplest-possible-classifier-or-why-high-accuracy-可能會誤導人
ZeroR,可能是最簡單的分類器,只是將多數類作為預測。使用高度不平衡的數據,您將獲得非常高的準確性,但是如果您的少數派是您感興趣的班級,那麼這將完全沒有用。請在帖子中找到詳細信息和示例。
最重要的是:在處理不平衡數據時,您可以構建過於簡單的分類器,這些分類器具有很高的準確性,卻沒有任何實用價值...
閱讀完以上所有答案後,這裡介紹了一種常識。最優性是一個靈活的術語,總是需要加以限定。換句話說,說模型或算法是“最優的”是沒有意義的,尤其是在科學意義上。
每當有人說他們正在科學地優化某些東西時,我建議您問一個問題:“您在什麼意義上定義最優性?”這是因為在科學中,除非可以測量,否則無法優化(最大化,最小化等)。
作為示例,OP提出以下要求:
“ 為什麼準確性不是評估分類模型的最佳方法?”
以上問題中的“最佳”一詞中有一個關於優化的嵌入式參考。 “最好”在科學上是沒有意義的,因為“善”是無法科學衡量的。
科學上對這個問題的正確回答是,OP需要定義“好”的含義。在現實世界中(在學術練習和Kaggle競賽之外),在使用機器向他人(或代替他人)提出建議或做出決策時,總要考慮成本/收益結構。
對於分類任務,該信息可以嵌入到成本/收益矩陣中,並具有與混淆矩陣相對應的條目。最後,由於成本/收益信息是正在考慮使用機械幫助進行決策的人員的功能,因此它會隨情況而變化,因此,永遠不會有固定的最優度量來衡量即使在一個問題中,它始終可以工作,更不用說涉及分類的所有問題(即“模型”)了。
任何優化分類的方法只要忽略成本,後果自負。如圖所示,即使ROC AUC也不能保持成本不變。
您可以將準確性視為分類的$ R ^ 2 $:這是最初吸引人的度量標準,可以用來與模型進行比較,但在詳細檢查中卻不夠。
在兩種情況下,過度擬合都是一個主要問題。就像$ R ^ 2 $較高的情況可能意味著您是在對噪聲而不是信號進行建模一樣,高精度可能是一個危險信號,表明您的模型過於嚴格地應用於測試數據集並且沒有通用適用性。當分類類別高度不平衡時,這尤其成問題。最準確的模型可能是瑣碎的模型,該模型將所有數據歸為一個類別(準確度等於最常見類別的比例),但是如果您需要對具有不同真實分佈類別的數據集進行分類,則此準確度會下降很多
正如其他人所指出的那樣,準確性的另一個問題是對失敗代價的內在漠視-即假設所有錯誤分類都是相等的。實際上,它們並非如此,獲得錯誤分類的成本在很大程度上取決於主題,因此您可能更願意將特定類型的錯誤最小化,而不是使準確性最大化。