现代数学有三个重要的基石:概率论、数值分析、线性代数。概率论说明了事物可能是什么样的;数值分析揭示了他们为什么这样,以及如何变成这样;线性代数则告诉我们事物从来不只有一个样子,使我们能从多个角度观察事物。
两个向量之间的距离计算,在数学上称为向量的距离,也称为样本之间的相似性度量(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)