機器學習---評估指標(簡單易懂,形象生動)

評估指標是判斷一個模型好壞的概念。
哦,模型又是什麼?可以這麼認爲,我們想預測未知,就要做很多工作,這些工作包括取得數據,分析數據,處理數據等等,形成一整套完整的流程下來。也叫建模。建模的結果就是模型。

  1. 混淆矩陣
    正確的一邊我們稱爲:陽性
    正確的另一邊我們稱爲:陰性
    注意:這裏的正確是指對於模型而言,如果一個模型是檢測垃圾郵件的,那麼檢測出垃圾郵件是陽性,檢測出來的正常郵件是陰性。
    問題又來了,模型肯定不準確呀
    你說他是陽性,他就真是陽性了?根據實際看來
    陽性裏面:真的陽性叫真陽性,錯誤識別的那個陽性叫假陽性。
    同理,
    陰性裏面:真的陰性叫真陰性,錯誤識別的那個陰性叫假陰性。

    模型識別的陽性 模型識別的陰性
    實陽性 真陽性
    實陰性 假陽性

    這就是混淆矩陣。

  2. 準確率

    混淆矩陣

    模型識別的陽性 模型識別的陰性
    實陽性 30
    實陰性 10

    總共有100份數據,有80個數據被分對了(真陽性30個真陰性50個),那麼準確率=80/100=0.8

    ---------------------------------有一些很重要的場合,比如信用卡詐騙,如果我們找一個準確率很高的模型-------------------------
    混淆矩陣

    模型識別的陽性 模型識別的陰性
    實陽性 60
    實陰性 10

    總共100條信息,真正情況:60條正常,40條盜刷。
    模型識別出來:70條正常(60真陽性,10假陽性),30條盜刷(30真陰性)。
    那麼=60+30100=90%準確率=\frac{60+30}{100 }= 90\%
    但是對於這樣的數據一點兒都不好,10個假陽性數據就已經說明這個模型會帶來大量的財產損失了。
    -----------------------------------------------------這時就需要着重關注:我們到底覺得哪些錯誤不能犯,比如看病模型不能把生病的病人診斷成健康(假陰性),垃圾郵件不能把正常的郵件識別成垃圾郵件(假陽性)。這時候就必須要用另外的指標(精度,召回率)來衡量這個模型了-------------------------------------------

  3. 精度
    精度:在所有模型診斷的陽性數據中,有多少真陽性。
    翻譯成白話後:精度就是衡量模型識別能力的指標。
    例1:假設有個醫療模型混淆矩陣:

    診斷生病 診斷健康
    1000
    800

    這個模型的目的是檢測生病的人的,換句話說:在所有診斷爲生病(陽性,包括真陽性和假陽性)的人中,真生病(真陽性)的比例。
    根據以上模型:=10001000+800=55.6%精度=\frac{1000}{1000+800}=55.6\%

    例2:假設有個垃圾郵件處理系統混淆矩陣:

    識別出的垃圾郵件 識別出的正常郵件
    圾郵件 100
    常郵件 30

    這個模型的目的是檢測垃圾郵件的,換句話說:在所有識別出垃圾郵件(陽性,包括真陽性和假陽性)中,真正的垃圾郵件(真陽性)比例。
    根據以上模型:=100100+30=76.9%精度=\frac{100}{100+30}=76.9\%

  4. 召回率
    召回率:所有真正陽性數據中,有多少陽性被識別出來了。
    翻譯成白話後:衡量真實數據被預測正確的概率。
    例1:假設還是這個醫療模型,混淆矩陣:

    診斷生病 診斷健康
    1000
    800

    真實生病的人(就是生病被檢測出來的真陽性和生病沒被檢測出來的假陰性)中,生病被檢測出來了(真陽性)的概率。
    根據以上模型:=10001000+200=83.3%召回率=\frac{1000 }{1000+200}=83.3\%
    例2:假設還是這個垃圾郵件處理系統,混淆矩陣:

    識別出的垃圾郵件 識別出的正常郵件
    圾郵件 100
    常郵件 30

    真實的垃圾郵件(被檢測出來的真陽性垃圾郵件和沒被檢測出來的假陰性郵件)中,被檢測出的垃圾郵件(真陽性)的概率。
    根據以上模型:=100100+170=37%召回率=\frac{100}{100+170}=37\%

------------------------------------- 發動我們聰明的大腦思考一下,對於上面的醫療模型我們應該想要什麼?我們必須要明白:一個沒有被診斷出來的病人只有等死的份了,我們一定一定要提高模型的檢測能力(精度),把所有生病的人都檢測出來。再發動我們聰明的大腦思考,對於上面的垃圾郵件檢測模型我們需要注意什麼?我們必須明白:你的大學錄取郵件必須被接收到,如果被誤分進垃圾箱了,那是多麼可怕的事情,我們一定一定要把真實郵件都分對(召回率),召回率越大越安全。 參照指標爲第6個知識點----------------------------------------------如果我們想把兩者結合起來看呢?再或者我們着重看其中一個指標,附帶看另外一個指標,這時候怎麼衡量?請熟悉以下內容--------------------------------------------------------

  1. F1得分
    我們發現,衡量一個模型好壞必然是有一個指標越高越好,但是如果另一個指標過低,那麼即使最好的指標是100%(你可以用第2點的信用卡混淆矩陣的例子檢驗),它也不是一個好模型,我們必須想辦法把兩個指標得分結合在一起看,使用一個函數來總結一下,這個函數的得分越大越好,但是當精度和召回率有一個很小時,這個函數就必須很小,代表這個模型不是一個好模型。
    這個函數叫調和函數(F1 Score):
    F1Score=2PrecisionRecallPrecision+RecallF1 Score=2⋅\frac{Precision∗Recall}{Precision+Recall​}
    我們直接看調和函數最極端的情況,比如精度是100,召回率是0,F1得分爲0,說明這個模型不好,事實也確實如此。再如精度和召回率都是50呢,F1得分爲50,代表這個結果中等,事實也是如此。如果兩個都是100呢,F1得分爲100,事實更是如此。0,50,100這幾個得分很好的把數據中好壞劃分出來了,並且一方得分越低,F1得分越低,確實有很好的衡量作用。
    F1是把精度和召回率同等重要程度看的,兩者重要性是一樣的

  2. FβF-\beta得分
    β\beta是個可變參數,當β\beta取1時就是第5個知識點F1得分了。
    現在:
    -精度--------------------F1得分(β\beta取1,同等重要)----------------召回率-
    β\beta在上面這條線滑動,越靠近精度(小於1)表明精度重要,越靠近召回率(大於1)表明召回率重要。
    所以根據β\beta取值來表明我們心目中對於指標的看重程度。
    在式子中應如下表示:
    Fβ=(1+β2)PrecisionRecallβ2Precision+RecallF\beta=(1+\beta^2)⋅\frac{Precision⋅Recall}{\beta^2⋅Precision+Recall}
    分析:
    FβF\beta得分公式中,如果設爲
    β=0\beta = 0

    F0=(1+02)PrecisionRecall0Precision+Recall=PrecisionRecallRecall=Precision(1+0^2) \cdot \frac{\text{Precision} \cdot \text{Recall}}{0 \cdot \text{Precision} + \text{Recall}} = \frac{\text{Precision} \cdot \text{Recall}}{\text{Recall}} = \text{Precision}
    因此,β\beta的最低值爲 0,這時候就得出精度。

    如果 β\beta=N 非常大,則
    Fβ=(1+N2)PrecisionRecallN2Precision+Recall=PrecisionRecallN21+N2Precision+11+N2RecallF\beta = (1+N^2) \cdot \frac{\text{Precision} \cdot \text{Recall}}{N^2 \cdot \text{Precision} + \text{Recall}}= \frac{\text{Precision} \cdot \text{Recall}}{\frac{N^2}{1+N^2}\text{Precision} + \frac{1}{1+N^2}\text{Recall}}
    隨着NN變成無窮大,可以看出11+N2\frac{1}{1+N^2}變成 0,並且N21+N2\frac{N^2}{1+N^2}變成 1.
    因此,如果取極限值,則
    limNFN=PrecisionRecall1Precision+0Recall=Recall{\lim_{N\rightarrow \infty}} F_N = \frac{\text{Precision} \cdot \text{Recall}}{1 \cdot \text{Precision} + 0 \cdot \text{Recall}} = \text{Recall}
    因此,得出結論:β\beta的界限在 0 和
    \infty之間。
    最終要的是:
    如果 β\beta = 0, 則得出精度。
    如果β=\beta = \infty 則得出召回率。
    如果β\beta = 1,則得出精度和召回率的調和平均數。
    對於β\beta取其他值,如果接近 0,則得出接近精度的值,如果很大,則得出接近召回率的值。

  3. ROC曲線
    ROC曲線也叫受試者工作特性曲線。
    我們劃分數據的時候關注拆分的好壞,如果全部劃分正確,則得分爲1.稍微好一點的劃分0.8左右,隨機劃分的話,得分爲0.5左右。
    那麼需要明白兩個定義:
    1.完美劃分
    真陽性比例,即所有真正的陽性標記的點(事實陽性)中,有多少分類正確(真陽性)=真陽性比例=\frac{真陽性}{事實陽性}
    假陽性比例,即在所有真正陰性標記的點(事實陰性)中,有多少分類被錯誤的判斷爲陽性(假陽性)=假陽性比例=\frac{假陽性}{事實陰性}
    這裏學習的時候不能搞混,要明白,ROC指標是來判斷機器劃分數據完不完美的東西,機器覺得自己識別出來的叫陽性,另一部分叫陰性,那麼,對於衡量機器的指標來說,陽性是它的面子,對於這個面子分爲兩部分,一部分是分對的,在事實陽性裏面能找到,一部分這面子有毒,你說他是陽性,卻是事實陰性裏面的,那麼就有完美和不完美,完美就是=真陽性比例=\frac{真陽性}{事實陽性},不完美就是=假陽性比例=\frac{假陽性}{事實陰性}
    2.得分
    我們從頭到尾依次多劃分幾次,就能得到很多對真陽性比例和假陽性比例。把衆多對真陽性比例和假陽性比例值畫在二維座標上,形成了一條曲線,就叫ROC曲線。我們驚奇的發現,如果這個模型能被全部劃分正確,那麼ROC曲線與X軸圍成的面積爲1.如果這個模型不能被完完全全的劃分正確,總是會出現一點兒小錯誤,那麼ROC曲線圍成的面積爲0.8左右,同理這個模型無論怎麼劃分都有很多錯誤,就像是隨機灑落好壞參半那樣,面積就爲0.5左右。
    所以,一個模型越好(數據越容易被完美分隔),他的ROC曲線下的面積就越接近1,我們可以用ROC曲線衡量模型(數據)是否能被完美劃分的可能性。
    當然,機器總是把所有陽性識別成陰性,所有陰性識別成陽性,ROC曲線面積就是0了。

  4. 迴歸指標(專門用來評估線性迴歸的)
    邏輯迴歸是分類,線性迴歸是預測。如果不明白可以參考機器學習方法:邏輯迴歸與線性迴歸
    這裏的迴歸指標是判斷線性迴歸的,如果各個數據和機器擬合的預測線差距越大,說明越不好,差距越小說明越好。大致瞭解之後看詳細解釋:

  • 平均絕對誤差
    將點到線的所有距離絕對值求和。
    使用sklearn很好完成,如果對於sklearn不熟,可以參考skearn分析數據

    from sklearn.metrics import mean_absolute_error
    from sklearn.linear_model import LinearRegression
    
    classifier = LinearRegression()#創建一個線性迴歸分類器對象
    classifier.fit(X,y)#把數據放到分類器裏面,得到擬合函數
    
    guesses = classifier.predict(X)#模型對數據所作的預測,取x值,預測y
    
    error = mean_absolute_error(y,guesses)#與真正的y比較,得到平均絕對誤差
    

    缺點:絕對值函數不好微分,對於像梯度下降這樣實時調整的算法來說不太好用,下面介紹另外一種方法。

  • 均方誤差
    點到線的距離我們不取絕對值,取他的平方,同理在sklearn中完成,僅需要把平均絕對值改爲平方

    from sklearn.metrics import mean_squared_error #此處更改
    from sklearn.linear_model import LinearRegression
    
    classifier = LinearRegression()#創建一個線性迴歸分類器對象
    classifier.fit(X,y)#把數據放到分類器裏面,得到擬合函數
    
    guesses = classifier.predict(X)#模型對數據所作的預測,取x值,預測y
    
    error = mean_squared_error(y,guesses)#與真正的y比較,得到均方誤差   此處更改
    
  • R2得分
    R2分數通過將我們的模型與最簡單的可能模型相比得出。
    什麼叫最簡單的可能模型?
    就是取所有數據的平均值,然後畫一條水平線劃分。就是最簡單的模型了。
    計算出這個最簡單模型的均方誤差。
    我們用自己的線性迴歸模型來和這個最簡單模型比較,誤差越小,說明模型越不好,誤差越大說明模型越好。
    我們想一個公式來表達這個關係,最後結果就是R2得分了。
    R2=1R2 = 1 - \frac{線性迴歸模型}{最簡單模型}

    式子中1-的作用就是說明:
    當我們的線性迴歸模型越好時,$ \frac{線性迴歸模型}{最簡單模型}R2比值越小,R2越大。 當我們的線性迴歸模型越差時, \frac{線性迴歸模型}{最簡單模型}$比值越大,R2越小。
    也就是,R2取值爲0-1之間,得分越大線性迴歸模型越好。
    在sklearn中舉個例子

    from sklearn.metrics import r2_score #此處更改
    
    y_true = [1, 2, 4]
    y_pred = [1.3, 2.5, 3.7]
    
    r2_score(y_ture, y_pred)
    

我們看到,無論是平均絕對誤差,還是均方誤差,還是R2得分都是專門用來評估線性迴歸的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章