日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

基于阈值的损失函数_【代码+推导】常见损失函数和评价指标总结

發布時間:2024/10/14 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于阈值的损失函数_【代码+推导】常见损失函数和评价指标总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(給機器學習算法與Python學習加星標,提升AI技能)

作者:董文輝

本文長度為4500字,建議閱讀10+分鐘

本文為你總結常見損失函數和評價指標。

目錄
  • 一、損失函數
    • 1.1 回歸問題
    • 1.2 分類問題
  • 二、評價指標
    • 2.1 回歸問題

    • 2.2 分類問題

  • 參考資料

一、損失函數

1.1 回歸問題

1. 平方損失函數(最小二乘法):

回歸問題中常用的損失函數,在線性回歸中,可以通過極大似然估計(MLE)推導。計算的是預測值與真實值之間距離的平方和。實際更常用的是均方誤差(Mean Squared Error-MSE):

2. 平均絕對值誤差(L1)-- MAE:

MAE是目標值和預測值之差的絕對值之和,可以用來衡量預測值和真實值的距離。但是它不能給出,模型的預測值是比真實值小還是大。

3. MAE(L1) VS MSE(L2):

  • MSE計算簡便,但MAE對異常點有更好的魯棒性:當數據中存在異常點時,用MSE/RMSE計算損失的模型會以犧牲了其他樣本的誤差為代價,朝著減小異常點誤差的方向更新。然而這就會降低模型的整體性能。

直觀上可以這樣理解:如果我們最小化MSE來對所有的樣本點只給出一個預測值,那么這個值一定是所有目標值的平均值。但如果是最小化MAE,那么這個值,則會是所有樣本點目標值的中位數。眾所周知,對異常值而言,中位數比均值更加魯棒,因此MAE對于異常值也比MSE更穩定。
  • NN中MAE更新梯度始終相同,而MSE則不同:MSE損失的梯度隨損失增大而增大,而損失趨于0時則會減小。
  • Loss選擇建議:
    • MSE:如果異常點代表在商業中很重要的異常情況,并且需要被檢測出來
    • MAE:如果只把異常值當作受損數據

4. Huber損失:

Huber損失是絕對誤差,只是在誤差很小時,就變為平方誤差。
  • 當Huber損失在之間時,等價為MSE
  • 在和時等價為MAE
使用MAE訓練神經網絡最大的一個問題就是不變的大梯度,這可能導致在使用梯度下降快要結束時,錯過了最小點。而對于MSE,梯度會隨著損失的減小而減小,使結果更加精確。在這種情況下,Huber損失就非常有用。它會由于梯度的減小而落在最小值附近。比起MSE,它對異常點更加魯棒。因此,Huber損失結合了MSE和MAE的優點。但是,Huber損失的問題是我們可能需要不斷調整超參數delta。下圖是Huber跟隨的變化曲線。當很大時,等價為MSE曲線,當很小時,等價為MAE曲線。

1.2 分類問題:

1. LogLoss:

二分類任務中常用的損失函數,在LR中,通過對似然函數取對數得到。也就是交叉熵損失函數。

2. 指數損失函數:

在AdaBoost中用到的損失函數。它是前向分步加法算法的特例,是一個加和模型。在Adaboost中,經過m此迭代之后,可以得到:Adaboost每次迭代時的目的是為了找到最小化下列式子時的參數α 和G:而指數損失函數(exp-loss)的標準形式如下可以看出,Adaboost的目標式子就是指數損失,在給定n個樣本的情況下,Adaboost的損失函數為:

二、評價指標

如何評估機器學習算法模型是任何項目中一個非常重要的環節。分類問題一般會選擇準確率(Accuracy)或者AUC作為metric,回歸問題使用MSE,但這些指標并不足以評判一個模型的好壞,接下來的內容我將盡可能包括各個評價指標。因為損失函數大部分可以直接作為評價指標,所以損失函數中出現過的簡單介紹。

2.1 回歸問題

1. MAE:平均絕對誤差(Mean Absolute Error),范圍2. MSE:均方誤差(Mean Square Error),范圍3. RMSE:根均方誤差(Root Mean Square Error),范圍取均方誤差的平方根可以使得量綱一致,這對于描述和表示是有意義的。4. MAPE:平均絕對百分比誤差(Mean Absolute Percentage Error)注意點:當真實值有數據等于0時,存在分母0除問題,該公式不可用!5. SMAPE:對稱平均絕對百分比誤差(Symmetric Mean Absolute Percentage Error)注意點:真實值、預測值均等于0時,存在分母為0,該公式不可用!6. R Squared:決定系數(Coefficient of determination),被人們稱為最好的衡量線性回歸法的指標。如果我們使用同一個算法模型,解決不同的問題,由于不同的數據集的量綱不同,MSE、RMSE等指標不能體現此模型針對不同問題所表現的優劣,也就無法判斷模型更適合預測哪個問題。得到的性能度量都在[0, 1]之間,可以判斷此模型更適合預測哪個問題。公式的理解:
  • 分母代表baseline(平均值)的誤差,分子代表模型的預測結果產生的誤差;
  • 預測結果越大越好,為1說明完美擬合,為0說明和baseline一致;
  • 7. 代碼實現:# coding=utf-8import numpy as npfrom sklearn import metricsfrom sklearn.metrics import r2_score# MAPE和SMAPE需要自己實現def mape(y_true, y_pred): return np.mean(np.abs((y_pred - y_true) / y_true)) * 100def smape(y_true, y_pred): return 2.0 * np.mean(np.abs(y_pred - y_true) / (np.abs(y_pred) + np.abs(y_true))) * 100y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0])y_pred = np.array([1.0, 4.5, 3.5, 5.0, 8.0, 4.5, 1.0])# MSEprint(metrics.mean_squared_error(y_true, y_pred)) # 8.107142857142858# RMSEprint(np.sqrt(metrics.mean_squared_error(y_true, y_pred))) # 2.847304489713536# MAEprint(metrics.mean_absolute_error(y_true, y_pred)) # 1.9285714285714286# MAPEprint(mape(y_true, y_pred)) # 76.07142857142858# SMAPEprint(smape(y_true, y_pred)) # 57.76942355889724# R Squaredprint(r2_score(y_true, y_pred))

    2.2 分類問題

    0. Confusion Matrix(混淆矩陣):

    混淆矩陣一般不直接作為模型的評價指標,但是他是后續多個指標的基礎。以下為二分類的混淆矩陣,多分類的混淆矩陣和這個類似。預測正例預測反例
    真實正例TP(真正例)FN(假反例)
    真實反例FP(假正例)TN(真反例)
    我們訓練模型的目的是為了降低FP和FN。很難說什么時候降低FP,什么時候降低FN。基于我們不同的需求,來決定降低FP還是FN。
    • 降低假負數例(FN):假設在一個癌癥檢測問題中,每100個人中就有5個人患有癌癥。在這種情況下,即使是一個非常差的模型也可以為我們提供95%的準確度。但是,為了捕獲所有癌癥病例,當一個人實際上沒有患癌癥時,我們可能最終將其歸類為癌癥。因為它比不識別為癌癥患者的危險要小,因為我們可以進一步檢查。但是,錯過癌癥患者將是一個巨大的錯誤,因為不會對其進行進一步檢查。
    • 降低假正例(FP):假設在垃圾郵件分類任務中,垃圾郵件為正樣本。如果我們收到一個正常的郵件,比如某個公司或學校的offer,模型卻識別為垃圾郵件(FP),那將損失非常大。所以在這種任務中,需要盡可能降低假正例。

    1. Accuracy(準確率):

    準確率也就是在所有樣本中,有多少樣本被預測正確。當樣本類別均衡時,Accuracy是一個很好的指標。但在樣本不平衡的情況下,產生效果較差。假設我們的訓練數據中只有2%的正樣本,98%的負樣本,那么如果模型全部預測為負樣本,準確率便是98%,。分類的準確率指標很高,會給我們一種模型很好的假象。

    2. Precision(精準率):

    含義:預測為正例的樣本中有多少實際為正;

    3. Recall(召回率):

    含義:實際為正例的樣本有多少被預測為正;

    4. P-R曲線:

    通過選擇不同的閾值,得到Recall和Precision,以Recall為橫坐標,Precision為縱坐標得到的曲線圖。

    PR曲線性質:
    • 如果一個學習器的P-R曲線被另一個學習器的曲線完全包住,后者性能優于前者;
    • 如果兩個學習器的曲線相交,可以通過平衡點(如上圖所示)來度量性能;
    • 閾值下降:
      • Recall:不斷增加,因為越來越多的樣本被劃分為正例,假設閾值為0.,全都劃分為正樣本了,此時recall為1;
      • Precision:正例被判為正例的變多,但負例被判為正例的也變多了,因此precision會振蕩下降,不是嚴格遞減;
    • 如果有個劃分點可以把正負樣本完全區分開,那么P-R曲線面積是1*1;

    5. (加權調和平均)和 (調和平均):

    • :召回率(Recall)影響更大,eg.
    • :精確率(Precision)影響更大,eg.
    為1的時候得到:調和平均亦可推出:

    6. ROC-AUC:

    Area Under Curve(AUC)二分類問題中使用非常廣泛的一個評價指標。AUC的本質是,任取一個正樣本和負樣本,模型輸出正樣本的值大于負樣本值的概率。構成AUC的兩個基本指標是假正例率和真正例率。
    • 橫軸-假正例率: 實際為負的樣本多少被預測為正;
    • 縱軸-真正例率: 實際為正的樣本多少被預測為正;
    TPR和FPR的范圍均是[0,1],通過選擇不同的閾值得到TPR和FPR,然后繪制ROC曲線。

    曲線性質:
  • 閾值最大時,對應坐標點為(0,0),閾值最小時,對應坐標點(1,1)
  • ROC曲線越靠近左上角,該分類器的性能越好;
  • 對角線表示一個隨機猜測分類器;
  • 若一個學習器的ROC曲線被另一個學習器的曲線完全包住,后者性能優于前者;
  • AUC: ROC曲線下的面積為AUC值。

    7. 代碼實現:

    from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,fbeta_scorey_test = [1,1,1,1,0,0,1,1,1,0,0]y_pred = [1,1,1,0,1,1,0,1,1,1,0]print("準確率為:{0:%}".format(accuracy_score(y_test, y_pred)))print("精確率為:{0:%}".format(precision_score(y_test, y_pred)))print("召回率為:{0:%}".format(recall_score(y_test, y_pred)))print("F1分數為:{0:%}".format(f1_score(y_test, y_pred)))print("Fbeta為:{0:%}".format(fbeta_score(y_test, y_pred,beta =1.2)))

    參考資料:

    [1]分類問題性能評價指標詳述:?

    https://blog.csdn.net/foneone/article/details/88920256
    [2]AUC,ROC我看到的最透徹的講解:

    https://blog.csdn.net/u013385925/article/details/80385873
    [3]機器學習大牛最常用的5個回歸損失函數,你知道幾個?:

    https://www.jiqizhixin.com/articles/2018-06-21-3
    [4]機器學習-損失函數:?

    https://www.csuldw.com/2016/03/26/2016-03-26-loss-function/
    [5]損失函數jupyter notebook:

    https://nbviewer.jupyter.org/github/groverpr/Machine-Learning/blob/master/notebooks/05_Loss_Functions.ipynb
    [6]L1 vs. L2 Loss function:

    http://rishy.github.io/ml/2015/07/28/l1-vs-l2-loss/
    [7]P-R曲線深入理解:?

    https://blog.csdn.net/b876144622/article/details/80009867

    原文鏈接:

    https://zhuanlan.zhihu.com/p/91511706

    推薦閱讀12521 Star!Python學習的必備法寶,隨查隨用,太方便了吧collections助力你的代碼更加簡潔、高效優雅【下載】74頁中文Pytorch模型訓練實用手冊【深度】詳解&Faster R-CNN目標檢測的實現過程看小姐姐用動圖展示10大Git命令

    喜歡就點「在看」吧 !

    總結

    以上是生活随笔為你收集整理的基于阈值的损失函数_【代码+推导】常见损失函数和评价指标总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。