現代數學有三個重要的基石:概率論、數值分析、線性代數。概率論說明了事物可能是什麼樣的;數值分析揭示了他們爲什麼這樣,以及如何變成這樣;線性代數則告訴我們事物從來不只有一個樣子,使我們能從多個角度觀察事物。
兩個向量之間的距離計算,在數學上稱爲向量的距離,也稱爲樣本之間的相似性度量(similarity measurement)。它反映爲某種事物在距離上接近或遠離的程度。直覺上,距離越近的就越相似,越容易歸爲一類;
各類距離的意義與Python實現
1. 歐氏距離(Euclidean Distance)
是最易於理解的一種距離計算方式,源自歐式空間中兩點間的距離公式;
Python實現:
From numpy import *
Vector1 = mat([1,2,3])
Vector2 = mat([4,5,6])
D=sqrt((vector1-vector2)*(vector1-vector2).T))
曼哈頓距離(Manhanttan Distance)
也稱爲城市街區距離;
Python實現:
Vector1 = mat([1,2,3])
Vector2 = mat([4,5,6])
D=sum(abs(vector1-vector2))切比雪夫距離(Chebyshev Distance)
類似於國際象棋裏的移動思路;
Python實現:
From numpy import *
Python實現:
Vector1 = mat([1,2,3])
Vector2 = mat([4,5,6])
D=abs(vector1-vector2).max()夾角餘弦(Cosine)
幾何中的夾角可用來衡量兩個向量方向的差異,機器學習中借用這一概念來衡量樣本向量之間的差異;取值範圍爲[-1,1];
Python實現:
From numpy import *
Cosv12=dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))漢明距離(Hamming Distance)
兩個等長字符串s1與s2之間的漢明距離定義爲將其中一個變成另一個所需要的最小替換次數。例如字符串“1111”與“1001”之間的漢明距離爲2。
應用:信息編碼(爲了增強容錯性,應是的編碼間的最小漢明距離儘可能大)。
Python實現:
From numpy import*
MatV = mat([[1,1,0,1,0,1,0,0,1],[0,1,1,0,0,0,1,1,1]])
Smstr = nonzero(matV[0]-matV[1]);
D=shape(smstr[0])[1]傑卡德相似係數(Jaccard Similarity Coefficient)
兩個集合A和B的交集元素在A、B的並集中所佔的比例,稱爲兩個集合的傑卡德相似係數。
傑卡德距離用兩個集合中不同元素佔所有元素的比例來衡量兩個集合的區分度。
可將傑卡德相似係數用在衡量樣本的相似度上。
Python實現:
From numpy import*
Import scipy.spatial.distance as dist
matV = mat([[1,1,0,1,0,1,0,0,1],[0,1,1,0,0,0,1,1,1,]])
d=dist.pdist(matV,’jaccard’)馬氏距離(Mahalanobis Distance)
有了數字特徵,我們可以將歐式距離發展爲馬氏距離
Python實現:
From numpy import *
featuremat=mat([[21,43,63,23,54],[66,44,32,55,23]])
covinv = linalg.inv(cov(featuremat))
tp = featuremat.T[0]-featuremat.T[1]
distma = sqrt(dot(dot(tp,covinv),tp.T))標準化歐式距離的Python實現:
Vectormat = mat([[1,2,3],[4,5,6]])
V12 = vectormat[0]-vectormat[1]
Print sqrt(v12*v12.T)
norm
Varmat = std(vectormat.T,axis=0)
Normvmat = (vectormat-mean(vectormat))/varmat.T
Normv12 = normvmat[0]-normvmat[1]
Print sqrt(normv12*normv12.T)
python實現相關係數
from numpy import *
featuremat=mat([[21,43,63,23,54],[66,44,32,55,23]])
計算平均值
Mv1=mean(featuremat[0])
Mv2=mean(featuremat[1])
計算兩列標準差
Dv1=std(featuremat[0])
Dv2=std(featuremat[1])
Corref = mean(multiply(featuremat[0]-mv1,featuremat[1]-mv2))/(dv1*dv2)
二、表與線性結構的可視化
1>線圖的可視化:
--coding:utf-8--
import numpy as np
import matplotlib.pyplot as plt
曲線數據加入噪聲
x = np.linspace(-5,5,200);
y = np.sin(x); #給出y與x的基本關係
yn = y+np.random.rand(1,len(y))*1.5; #加入噪聲的點集
繪圖
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x,yn,c=’b’, marker=’o’)
ax.plot(x,y+0.75,’r’)
plt.show()
效果如下:
2>樹圖的可視化:
-- coding: utf-8 --
import sys
import os
import numpy as np
import matplotlib.pyplot as plt
import treePlotter as tp
配置utf-8輸出環境
reload(sys)
sys.setdefaultencoding(‘utf-8’)
繪製樹
myTree = {‘root’: {0: ‘leaf node’, 1: {‘level 2’: {0: ‘leaf node’, 1: ‘leaf node’}},2:{‘level2’: {0: ‘leaf node’, 1: ‘leaf node’}}}}
tp.createPlot(myTree)