1. 程式人生 > >python:距離實現綜述

python:距離實現綜述

積累+學習

綜述

所列的距離公式列表和程式碼如下:

  • 閔可夫斯基距離(Minkowski Distance)
  • 歐氏距離(Euclidean Distance)
  • 曼哈頓距離(Manhattan Distance)
  • 切比雪夫距離(Chebyshev Distance)
  • 夾角餘弦(Cosine)
  • 漢明距離(Hamming distance)
  • 傑卡德相似係數(Jaccard similarity coefficient)
  • 皮爾遜相關係數(Pearson product-moment correlation coefficient)

讀者可根據自己需求有選擇的學習。因使用向量程式設計的方法,距離計算得到了較大的簡化。

其中歐氏距離與曼哈頓距離是比較常用的

歐氏距離

python 原始碼 - 三種實現

import numpy as np

vect1 = np.mat([1,2,3]);
vect2 = np.mat([2,3,4]);

dis = np.sqrt((vect1 - vect2) * (vect1 - vect2).T)

#sqrt(3)
print dis

dis = np.sqrt( np.sum( np.square(vect1 - vect2) ) )

print dis

dis = np.linalg.norm(vect1 - vect2)

print
dis

曼哈頓距離(Manhattan Distance)

import numpy as np

vect1 = np.mat([1,2,3])
vect2 = np.mat([2,3,4])

dis = np.sum( np.abs(vect1-vect2) )

#3
print dis

夾角餘弦(Cosine)

幾何中夾角餘弦可用來衡量兩個向量方向的差異,機器學習中借用這一概念來衡量樣本向量之間的差異

在二維空間中向量A(x1,y1)與向量B(x2,y2)的夾角餘弦公式:

cos(θ)=x1x2+y1y2x21+y21x22+y2
2

兩個n維樣本點A(x11,x12,…,x1n)與B(x21,x22,…,x2n)的夾角餘弦類似的,對於兩個n維樣本點A(x11,x12,…,x1n)與B(x21,x22,…,x2n),可以使用類似於夾角餘弦的概念來衡量它們間的相似程度。

cos(θ)=AB|A||B|

cos(θ)=nk=1x1kx2knk=1x21knk=1x22k

夾角餘弦取值範圍為[-1,1]。夾角餘弦越大表示兩個向量的夾角越小,夾角餘弦越小表示兩向量的夾角越大。當兩個向量的方向重合時夾角餘弦取最大值1,當兩個向量的方向完全相反夾角餘弦取最小值-1。

import numpy as np

vect1 = np.random.rand(4).astype(float)
vect2 = np.random.rand(4).astype(float)

print vect1
print vect2

print np.dot(vect1,vect2)/( np.linalg.norm(vect1) * np.linalg.norm(vect2) )

#方法二:根據scipy庫求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=1-pdist(X,'cosine')

傑卡德相似係數(Jaccard similarity coefficient)

傑卡德相似係數

兩個集合A和B的交集元素在A,B的並集中所佔的比例,稱為兩個集合的傑卡德相似係數,用符號J(A,B)表示。

J(A,B)=|AB||AB|

傑卡德相似係數是衡量兩個集合的相似度一種指標。

傑卡德距離

Jaccard距離用來度量兩個集合之間的差異性,它是Jaccard的相似係數的補集,被定義為1減去Jaccard相似係數。

Jδ(A,B)=1J(A,B)=|AB||AB||AB|

python實現

# coding=utf8

from __future__ import print_function

import numpy as np
from scipy.spatial.distance import pdist

x = np.random.random(10) > 0.5
y = np.random.random(10) > 0.5

x = np.asarray(x, np.int32)
y = np.asarray(y, np.int32)

# 方法一:根據公式求解
up = np.double(np.bitwise_and((x != y), np.bitwise_or(x != 0, y != 0)).sum())
down = np.double(np.bitwise_or(x != 0, y != 0).sum())
d1 = (up / down)

# 方法二:根據scipy庫求解
X = np.vstack([x, y])
d2 = pdist(X, 'jaccard')

皮爾遜相關係數

Pearson product-moment correlation coefficient,又稱作 PPMCC或PCCs, 文章中常用r或Pearson’s r表示。在統計學中,皮爾遜積矩相關係數(英語:Pearson product-moment correlation coefficient,又稱作 PPMCC或PCCs, 文章中常用r或Pearson’s r表示)用於度量兩個變數X和Y之間的相關(線性相關),其值介於-1與1之間。在自然科學領域中,該係數廣泛用於度量兩個變數之間的相關程度。它是由卡爾·皮爾遜從弗朗西斯·高爾頓在19世紀80年代提出的一個相似卻又稍有不同的想法演變而來的。這個相關係數也稱作“皮爾森相關係數r”。

定義:

cov(X,Y)=E[(xμx)(yμy)]=ni=1(XiX)

相關推薦

python距離實現綜述

積累+學習 綜述 所列的距離公式列表和程式碼如下: 閔可夫斯基距離(Minkowski Distance) 歐氏距離(Euclidean Distance) 曼哈頓距離(Manhattan Distance) 切比雪夫距離(Chebyshev

Pythonsocket實現ftp程序

handler 拋出異常 失敗 all accept ESS net isp spa 剛開始學習socket編程,還不是特熟練,碼了好長時間,中間遇到許多問題,記錄一下用socketserver寫ftp server端: 1 #!/usr/bin/env python

Python黑科技50行代碼運用Python+OpenCV實現人臉追蹤+詳細教程+快速入門+圖像識

python 圖像識別 詳細 OpenCV 編程 嗨,我最親愛的夥計們,很高興我們又見面了。首先先感謝朋友們的關註。當然我更希望認識與計算機相關的領域的朋友咱們一起探討交流。重點說一下,我是真人,不是那些扒文章的自媒體組織,大家可以相互交流的! 本篇文章我們來講一下關於AI相關的人臉追蹤

python接口自動化測試二python代碼實現接口測試

服務 獲取 解碼 odi false 壓縮 詳情 異常 將不 url = ‘接口地址‘ r = requests.get(url) #發送get請求 print(r.status_code) #打印狀態碼,若有重定向,返回的是重定向

Python學習筆記1簡單實現ssh客戶端和服務端

bsp dev bre 客戶端 break 基於 bin listen 客戶 實現基於python 3.6。 server端: 1 __author__ = "PyDev2018" 2 3 import socket,os 4 server = socket.s

Pythonlambda表達式實現求兩個變量的最大值

函數 style ret 對象 else 兩個 說明 引用 spa lambda 表達式(又稱匿名函數)   作用:     創建一個匿名函數對象     同def 類似,但不提供函數名   格式:     lambda [參數1,參數2,.....]: 表達式(默認只能寫

python 通過udp協議實現客戶端與服務端的互動

(1)服務端 建立socket 繫結目的ip和埠號、 資料互動 import socket udpSer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #這裡的SOCK_DGRAM 為udp流 udpSe

Python通過互億無線API實現驗證碼的接收

1.在互億無線註冊使用者。 2.在簡訊驗證獲取APIid以及APIpasswd 3.文件中心下載Api介面後通過解壓開啟Demo 4.找到自己需要的語言原始碼通過記事本開啟 5.將原始碼複製到編譯器 修改httplib為http.client urllib.urlencode修改為urlli

python(GUI)程式設計tkinter實現跨平臺的記事本

實現一個簡單的編輯記事本,實現記事本的最基本功能,麻雀雖小五臟俱全 tkinter實現跨平臺的記事本效果圖: 原始碼: # -*- encoding:utf -*- from tkinter import * from tkinter.messagebox import * fr

python 迴圈連結串列的實現

#迴圈連結串列 表中最後一個結點的指標域指向頭結點,整個連結串列形成一個環 #單向迴圈連結串列的實現 初始化節點類,初始化頭結點 class Node : def __init__(self,data,next = Non

分類問題(一)SVM(Python——基於skearn實現鳶尾花資料集分類)

第一步: # -*- coding: utf-8 -*- """ Created on Fri Sep 21 14:26:25 2018 @author: bd04 """ # !/usr/bin/env python # encoding: utf-8 __auth

Pythonlambda表示式實現求兩個變數的最大值

lambda 表示式(又稱匿名函式)   作用:     建立一個匿名函式物件     同def 類似,但不提供函式名   格式:     lambda [引數1,引數2,.....]: 表示式(預設只能寫一個)   說明:     1.lambda 只是一個表示式,它用

WIDML翻譯Python從頭開始實現神經網路 - 簡介

Get the code: To follow along, all the code is also available as an iPython notebook on Github.   在這篇文章中,我們將從頭開始實現一個簡單的3層神經網路。我們不會得到所需的所有數學,但

Python使用map和reduce實現整數字符串轉換為整數(忽略int函式)

#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: map和

Python雷達圖的實現

雷達圖 雷達圖在資料探勘專案中多用於企業分析或者價值分析的環節視覺化。雷達圖分析法是一種系統分析的有效方法,它是從專案中自身建立的多方面分析企業的經營成果。並將這些方面的有關資料用比率表示出來,填寫到一張能表示各自比率關係的等比例圖形上,再用彩筆連線各自比率的結點後,恰似一張雷達圖表

Python簡單銀行系統實現

1、admin.py 定義管理員資訊和主介面顯示 #!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCh

資料探勘經典演算法Logistic(邏輯迴歸) python和sklearn實現

Logistic雖然不是十大經典演算法之一,但卻是資料探勘中常用的有力演算法,所以這裡也專門進行了學習,以下內容皆為親自實踐後的感悟和總結(Logistic原理、程式碼實現和優化、真實樣例資料、sklearn實現)。為了記錄的比較清楚,所以內容可能有點多,但都比較淺顯,下面進

資料探勘十大演算法(一)決策樹演算法 python和sklearn實現

學完到第三章——決策樹,python程式碼實現的僅是ID3演算法,sklearn為優化過的C4.5,這裡做一個詳細的總結包括(原理、程式碼、視覺化、scikit-learn實現),皆為親自實踐後的感悟。以下進入正文。 早前簡單瞭解了決策樹的原理,然後為了儘快使用便沒有深究直

Leetcode做題日記28. 實現strStr()(PYTHON)

實現 strStr() 函式。 給定一個 haystack 字串和一個 needle 字串,在 haystack 字串中找出 needle 字串出現的第一個位置 (從0開始)。如果不存在,則返回 -1。 示例 1: 輸入: haystack = “hello”, needle = “ll”