聚类算法中各种距离的计算与python的具体实现代码
一、聚類算法和相似度
在機器學習中,有兩類學習算法,一類是無監(jiān)督學習,另一類是監(jiān)督學習。聚類算法是無監(jiān)督學習算法,一般構(gòu)建用戶興趣屬性畫像等可應(yīng)用聚類算法;而一般的分類算法是有監(jiān)督學習,基于有標注的歷史數(shù)據(jù)進行算法模型構(gòu)建 。?
聚類的定義可以是這樣的:對大量未知標注的數(shù)據(jù)集,按照數(shù)據(jù)內(nèi)部存在的數(shù)據(jù)特征將數(shù)據(jù)集劃分為多個不同的類別,使得類別內(nèi)的數(shù)據(jù)比較相似,類別間的數(shù)據(jù)相似度較小。重點是計算樣本之間的相似度,這個相似度有時候也稱為樣本間的距離。
那么聚類中如何度量相似度呢?一般有兩種方法,一種是對所有樣本作特征投影,另一種則是距離計算。前者主要從直觀的圖像上反應(yīng)樣本之間的相似度關(guān)系,而后者則是通過衡量對象之間的差異度來反應(yīng)樣本之間的相似度關(guān)系。
一些基礎(chǔ)概念:
1、范數(shù)(數(shù)學基礎(chǔ)) ?
向量的范數(shù)可以簡單、形象地理解為向量的長度,或者向量到坐標系原點的距離,或者相應(yīng)空間內(nèi)的兩點之間的距離。
向量的范數(shù)定義: 向量的范數(shù)是一個函數(shù)||x||,滿足非負性||x||>0,齊次性||cx||=|c|*||x||,三角不等式||x+y||<=||x||+||y||.
L1范數(shù): ||x||為x向量各個元素絕對值之和。
L2范數(shù): ||x||為x向量各個元素平方和的開方,L2范數(shù)又稱歐幾里得范數(shù)。
Lp范數(shù): ||x||為x向量各個元素絕對值的p次方和的1/p次方。
L無窮范數(shù): ||x||為x向量各個元素絕對值最大的那個元素。
2、n維空間
距離的計算是基于一定的n維空間上的。
例如采集1個億微信用戶樣本,他們的特征變量不太一樣,例如年齡、收入、性格、學歷、職業(yè)、興趣、生活作息習慣等等進行初步的量化轉(zhuǎn)化,作為輸入變量進行假設(shè)分析。 ?那么這一個億樣本里面,哪些人是能夠做為中產(chǎn)階級,哪些人是可以作為文藝青年? ?可以建立文藝青年分類指標,然后分析每個樣本個體之間的接近或相似程度,分組建立關(guān)聯(lián)函數(shù)。 ?從直觀和簡單的分組概念出發(fā),對于龐大的數(shù)據(jù),也可以進行客觀的統(tǒng)計學分組劃分。 ?這里就會用到聚類分析方法,首先是測量樣本個體之間的差異或相似程度。 ?這里引入空間幾何概念,即將每個樣本當作一個點,分布在n維空間里,每個維度分別是年齡、收入、性格等。 ?如果兩個變量越接近,我們定義為兩個點之間的越相似或親密,這里使用“距離”的概念進行定義。 ?如果變量是數(shù)值型的變量,而非函數(shù)變量。那么可以使用如下空間和距離進行量化樣本之間的相似程度。
?
二、各種距離的計算和python實現(xiàn)
閔可夫斯基距離 (Minkowski Distance)
歐式距離 (Euclidean Distance)
曼哈頓距離 (Manhattan Distance)
切比雪夫距離 (Chebyshew Distance)
夾角余弦 (Cosine)
漢明距離 (Hamming Distance)
杰卡德相似系數(shù) (Jaccard Similarity Coefficient)
?
1.閔可夫斯基距離 (Minkowski Distance)
嚴格意義上講,閔可夫斯基距離不能算是一種距離,而是一組距離的定義。
設(shè)有兩個n維向量A(x1,x2,x3,….xn)和B(y1,y2,y3,….yn)間的閔可夫斯基距離定義為:
其中p是一個參數(shù)。
當p=1時,就是曼哈頓距離;
當p=2時,就是歐式距離;
當p->無窮時,就是切比雪夫距離。
2.歐式距離 (Euclidean Distance)
歐式距離(L2范數(shù))是最易于理解的一種距離計算方法,源于歐式空間中兩點間的距離公式。兩個n維向量A(x1,x2,x3,…xn)和B(y1,y2,y3,…..yn)間的歐式距離:
Python實現(xiàn)歐式距離:
from numpy import *
vector1=mat([1,2,3])
vector2=mat([4,5,6])
print sqrt((vector1-vector2)*(vector1-vector2).T)
3.曼哈頓距離 (Manhattan Distance)
曼哈頓距離也稱城市街區(qū)距離(City Block Distance),也就是L1范數(shù)。
二維平面兩點A(x1,y1)和B(x2,y2)間的曼哈頓距離為:
d=|x2-x1|+|y2-y1|
兩個n維向量A(x1,x2,x3,…xn)和B(y1,y2,y3,….yn)間的曼哈頓距離為:
Python實現(xiàn)曼哈頓距離:
from numpy import *
vector1=mat([1,2,3])
vector2=mat([4,5,6])
print sum(abs(vector1-vector2))
4.切比雪夫距離 (Chebyshew Distance)
國際象棋中,國王每走一步能夠走到相鄰的8個方格中的任意一個,那么國王從A(x1,y1)走到B(x2,y2)最少需要多少步?最少步數(shù)總是max(|x2-x1|,|y2-y1|)步。類似的距離度量方法叫做切比雪夫距離(L無窮范數(shù))。
n維向量A(x11,x12,x13,….x1n)和B(x21,x22,x23,….x2n)間的切比雪夫距離:
它的另一種等價形式為:
Python實現(xiàn)切比雪夫距離:
from numpy import *
vector1=mat([1,2,3])
vector2=mat([4,7,6])
print abs(vector1-vector2).max()
5.夾角余弦 (Cosine)
幾何中夾角余弦可用來衡量兩個向量方向的差異,機器學習中用這一概念衡量樣本向量之間的差異。
兩個n維樣本點A(x11,x12,x13,…x1n)與B(x21,x22,x23,…x2n)的夾角余弦:類似地,對于兩個樣本點A(x11,x12,x13,…x1n)與B(x21,x22,x23,…x2n),可以使用類似夾角余弦的概念來衡量他們間的相似程度。
即
python 實現(xiàn)向量夾角
from numpy import *
vector1=mat([1,2,3])
vector2=mat([4,7,6])
cosV12=dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))
print cosV12
6.漢明距離 (Hamming Distance)
漢明距離的定義:兩個登場字符串s1和s2之間的漢明距離定義為將其中一個變?yōu)榱硗庖粋€所需要的最小替換次數(shù)。
應(yīng)用:信息編碼(為了增強容錯性,應(yīng)使得編碼間的最小漢明距離盡可能大)
Python實現(xiàn)漢明距離
from numpy import *
matV=mat([1,1,0,1,1,0,1],[1,0,1,0,1,0,1])
smstr=nonzero(matV[0]-matV[1])
print shape(smstr[0]) [1]
7.杰卡德相似系數(shù) (Jaccard Similarity Coefficient)
兩個集合A和B的交集元素在A、B的并集中所占的比率,稱為兩個集合的杰卡德相似系數(shù)。
杰卡德相似系數(shù)是衡量兩個集合相似度的一種指標。
杰卡德距離:與杰卡德相似系數(shù)相反的概念是杰卡德距離。
Python實現(xiàn)杰卡德距離
from numpy import *
import scipy.spatial.distance as dist #導入Scipy距離公式
matV=mat([1,1,0,1,0,1,0,0,1],[0,1,0,1,0,1,0,1,0])
print “dist.jaccard:”,dist.pdist(matV,’jaccard’)
總結(jié)
以上是生活随笔為你收集整理的聚类算法中各种距离的计算与python的具体实现代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可视化-echarts流向图制作及rec
- 下一篇: python数据类型转换方法列表