【機器學習基礎】常見二分類損失函數、距離度量的Python實現

2021-03-02 機器學習初學者

這裡用Numpy實現,設

import numpy as np

1.歐氏距離(Euclidean distance)

歐幾裡得度量(euclidean metric)(也稱歐氏距離)是一個通常採用的距離定義,指在m維空間中兩個點之間的真實距離,或者向量的自然長度(即該點到原點的距離)。在二維和三維空間中的歐氏距離就是兩點之間的實際距離。

def euclidean(x, y):

    return np.sqrt(np.sum((x - y)**2))

2.曼哈頓距離(Manhattan distance)

想像你在曼哈頓要從一個十字路口開車到另外一個十字路口,駕駛距離是兩點間的直線距離嗎?顯然不是,除非你能穿越大樓。實際駕駛距離就是這個「曼哈頓距離」。而這也是曼哈頓距離名稱的來源, 曼哈頓距離也稱為城市街區距離(City Block distance)。

def manhattan(x, y):

    return np.sum(np.abs(x - y))

3.切比雪夫距離(Chebyshev distance)

在數學中,切比雪夫距離(Chebyshev distance)或是L∞度量,是向量空間中的一種度量,二個點之間的距離定義是其各坐標數值差絕對值的最大值。以數學的觀點來看,切比雪夫距離是由一致範數(uniform norm)(或稱為上確界範數)所衍生的度量,也是超凸度量(injective metric space)的一種。

def chebyshev(x, y):

    return np.max(np.abs(x - y))

4.閔可夫斯基距離(Minkowski distance)

閔氏空間指狹義相對論中由一個時間維和三個空間維組成的時空,為俄裔德國數學家閔可夫斯基(H.Minkowski,1864-1909)最先表述。他的平坦空間(即假設沒有重力,曲率為零的空間)的概念以及表示為特殊距離量的幾何學是與狹義相對論的要求相一致的。閔可夫斯基空間不同於牛頓力學的平坦空間。

def minkowski(x, y, p):

    return np.sum(np.abs(x - y) ** p) ** (1 / p)

5.漢明距離(Hamming distance)

漢明距離是使用在數據傳輸差錯控制編碼裡面的,漢明距離是一個概念,它表示兩個(相同長度)字對應位不同的數量,我們以

def hamming(x, y):

    return np.sum(x != y) / len(x)
6.二分類損失函數

在二分類的監督學習中,支持向量機、邏輯斯諦回歸與最大熵模型、提升方法各自使用合頁損失函數、邏輯斯諦損失函數、指數損失函數,分別寫為:

這 3 種損失函數都是 0-1 損失函數的上界,具有相似的形狀。(見下圖,由代碼生成)

import numpy as np
import math
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,8))
x = np.linspace(start=-1, stop=2, num=1001, dtype=np.float)
logi = np.log(1 + np.exp(-x)) / math.log(2)
boost = np.exp(-x)
y_01 = x < 0
y_hinge = 1.0 - x
y_hinge[y_hinge < 0] = 0

plt.plot(x, y_01, 'g-', mec='k', label='(0/1損失)0/1 Loss', lw=2)
plt.plot(x, y_hinge, 'b-', mec='k', label='(合頁損失)Hinge Loss', lw=2)
plt.plot(x, boost, 'm--', mec='k', label='(指數損失)Adaboost Loss', lw=2)
plt.plot(x, logi, 'r-', mec='k', label='(邏輯斯諦損失)Logistic Loss', lw=2)
plt.grid(True, ls='--')
plt.legend(loc='upper right',fontsize=15)
plt.xlabel('函數間隔:$yf(x)$',fontsize=20)
plt.title('損失函數',fontsize=20)
plt.show()

總結

本文用Python實現了常見的幾種距離度量、損失函數,歡迎收藏!



本站qq群1003271085,加入微信群請回復「加群

獲取一折本站知識星球優惠券,複製連結直接打開:

https://t.zsxq.com/yFQV7am

喜歡文章,點個在看

相關焦點

  • 【機器學習基礎】常見二分類損失函數、距離度量的 Python 實現
    ,二個點之間的距離定義是其各坐標數值差絕對值的最大值。以數學的觀點來看,切比雪夫距離是由一致範數(uniform norm)(或稱為上確界範數)所衍生的度量,也是超凸度量(injective metric space)的一種。
  • 【機器學習基礎】用Python畫出幾種常見機器學習二分類損失函數
    在二分類的監督學習中,支持向量機、邏輯斯諦回歸與最大熵模型、提升方法各自使用合頁損失函數、邏輯斯諦損失函數、指數損失函數,分別寫為:
  • 深度學習中常見的損失函數
    、算法與應用》這本書,今天我把這本書中關於常見的損失函數這一節的內容公開出來,希望能對大家有所幫助。 在深度學習分類任務中,我們經常會使用到損失函數,今天我們就來總結一下深度學習中常見的損失函數。,因此該函數隻適合單目標的二分類或多分類問題。
  • softmax 損失函數 & 參數更新詳解
    目錄上節softmax要點回歸softmax進階多分類 - 基礎理解softmax多分類實現圖解softmax 損失函數產生及理解對參數求偏導推導及更新要點回歸:>邏輯回歸二分類用sigmoid變換成預測單個「概率」,損失函數為交叉熵,用梯度下降求解參數wbsoftmax多分類用softmax變換成多個「概率」,損失函數和求解思路類似相比(−∞,+∞)範圍內的數值結果,概率天然具有更好的可解釋性;我們獲得了K個類別(−∞,+∞)範圍內的分數zj,先通過e^zj將分數映射到(0,+∞);然後再歸一化到(0,1),拉開不同類別的差異
  • Python機器學習算法中的7個損失函數的詳細指南
    當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。損失函數是我們喜歡使用的機器學習算法的核心。但大多數初學者和愛好者不清楚如何以及在何處使用它們。它們並不難理解,反而可以增強你對機器學習算法的理解。那麼,什麼是損失函數,你如何理解它們的意義?在本文中,我將討論機器學習中使用的7種常見損失函數,並解釋每種函數的使用方法。
  • 度量學習筆記(一) | Metric Learning for text categorization
    解決方案:要想提高KNN文本分類的準確率,首先要解決的是距離度量的問題,於是我們就要用到距離度量算法,其中的大邊界最近鄰算法(Large Margin Nearest Neighbor, LMNN)是一類專門改進K 近鄰分類算法的距離度量算法。那麼什麼是度量學習呢?
  • 入門| 機器學習中常用的損失函數你知多少?
    選自towards data science作者:Ravindra Parmar機器之心編譯參與:李詩萌、王淑婷本文作者將常用的損失函數分為了兩大類:分類和回歸。然後又分別對這兩類進行了細分和講解,其中回歸中包含了一種不太常見的損失函數:平均偏差誤差,可以用來確定模型中存在正偏差還是負偏差。
  • 機器學習算法中的7個損失函數的詳細指南
    當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。損失函數是我們喜歡使用的機器學習算法的核心。但大多數初學者和愛好者不清楚如何以及在何處使用它們。它們並不難理解,反而可以增強你對機器學習算法的理解。那麼,什麼是損失函數,你如何理解它們的意義?
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    24數據結構和算法 25python網絡爬蟲 26機器學習入門篇 27機器學習入門篇2 28機器學習提升篇 29數據挖掘篇 30深度學習必備原理與實戰 31深度學習必備原理與實戰2 32深度學習必備原理與實戰3 33深度學習必備原理與實戰4 34
  • 機器學習基礎:相似度和距離度量究竟是什麼
    選自 Medium作者:Gonzalo Ferreiro Volpi機器之心編譯參與:Panda相似度度量和距離度量在整個機器學習領域都是非常基礎的概念,數據科學家 Gonzalo Ferreiro Volpi 近日通過淺顯易懂的推薦系統示例介紹了這些概念以及它們的計算方式。
  • 電子郵件分類的最佳機器學習算法
    電子郵件分類工作在相同的基本概念上。通過瀏覽電子郵件的文本,我們將使用機器學習算法來預測電子郵件是由一個人寫的還是另一個人寫的。我們將使用scikit學習庫中的Gaussian-naivebayes算法對兩位作者的郵件進行分類。下面是你可以在任何python的ide上實現的python代碼,確保你的系統上安裝了所需的庫。
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    共4天8節,講解機器學習和深度學習的模型理論和代碼實踐,梳理機器學習、深度學習、計算機視覺的技術框架,從根本上解決如何使用模型、優化模型的問題;每次課中,首先闡述算法理論和少量公式推導,然後使用真實數據做數據挖掘、機器學習、深度學習的數據分析、特徵選擇、調參和結果比較。
  • 常用的相似性度量算法(原理,實現,優缺點,適用場景...
    內容導讀對相似性算法的了解起源於最近在做 使用協同過濾原理 的推薦系統中, 基於鄰域的推薦算法 (User-Based CF和 和 Item-Based CF)需要估算不同樣本之間的 相似性度量(Similarity Measurement) ,這也是機器學習中在做 分類 的時候的一個常見場景。
  • 史上最強:numpy 實現全部機器學習算法
    來源:SOTOM數據科學 來自於加州伯克利大學的David Bourgin 使用Numpy實現了幾乎全部的機器學習算法,真正實現了手擼ML的願景。多少「調包俠」的願望都被這位小哥實現了! 該項目超過3萬行代碼,除了算法本身,還有很多的數據預處理代碼!
  • 使用Python從頭開始實現深度學習庫
    理解深度學習平臺基本構建基礎的初學者指南。深度學習已在短時間內從簡單的神經網絡演變為非常複雜的架構。為了支持這種快速擴展,在此過程中開發了許多不同的深度學習平臺和庫。這些庫的主要目標之一是提供用於構建和訓練深度學習模型的易於使用的界面,使用戶可以將更多的精力放在手頭的任務上。
  • BAT大廠機器學習算法面試經驗!一文帶你感受網際網路大佬知識點
    而它的學習策略為最大化分類間隔,最終可轉化為凸二次規劃問題求解。LR是參數模型,SVM為非參數模型。LR採用的損失函數為logisticalloss,而SVM採用的是hingeloss。在學習分類器的時候,SVM只考慮與分類最相關的少數支持向量點。LR的模型相對簡單,在進行大規模線性分類時比較方便。
  • 機器學習之模型評估(損失函數)
    機器學習的模型評估,主要包括兩部分:損失函數是性能度量的一個部分,而損失函數又分很多種,因此單獨作為一篇介紹損失函數。機器學習中的所有算法都依賴於最小化或最大化一個函數,我們稱之為「目標函數」。最小化的函數稱為「損失函數」,損失函數衡量的是模型預測預期結果的能力。通常情況下,損失函數分為二類:回歸問題和分類問題。
  • Facebook 爆錘深度度量學習:該領域13年來並無進展!網友:滄海橫流...
    也就是說:新出的ArcFace, SoftTriple, CosFace 等十種算法與十三年前的依賴成對或成三元組的損失函數並沒有本質上的區別。FB和康奈爾科技此論無疑是對深度度量學習過去十三年研究成果蓋棺定論,斬釘截鐵表示,雖然深度度量學習非常重要,但是學界這些年一直在灌水。
  • 雲計算學習:用PyTorch實現一個簡單的分類器
    所以我總結了一下自己當初學習的路線,準備繼續深入鞏固自己的 pytorch 基礎;另一方面,也想從頭整理一個教程,從沒有接觸過 pytorch 開始,到完成一些最新論文裡面的工作。以自己的學習筆記整理為主線,大家可以針對參考。第一篇筆記,我們先完成一個簡單的分類器。
  • 資源|用Python和NumPy學習《深度學習》中的線性代數基礎
    本文系巴黎高等師範學院在讀博士 Hadrien Jean 的一篇基礎學習博客,其目的是幫助初學者/高級初學者基於深度學習和機器學習來掌握線性代數的概念。掌握這些技能可以提高你理解和應用各種數據科學算法的能力。