统计学习方法第三章例3.1代码实践
代码内容如下:
#-*- coding:utf-8 -*-
from numpy import *
#根据不同的p值求不同的距离,p=1时是曼哈顿距离;p=2时是欧式距离。。。。。
def distance(vec1,vec2,p):
vec=abs(vec1-vec2)
print sum(vec**p)
return (float((sum(vec**p)))**(1.0/p))
#不解释
def loadDataset():
dataset=[[5,1],[4,4]]
return dataset
#根据距离最小选择最近邻点
def findClostestPlot(testVec,dataset,p):
dataMat=array(dataset);testVecMat=array(testVec)
m,n=shape(dataMat)
clostestLabel=-1;clostestDistance=inf
for i in xrange(m):
curDistance=distance(dataMat[i],testVecMat,p)
if curDistance<clostestDistance:
clostestLabel=i
clostestDistance=curDistance
return clostestLabel,clostestDistance,dataMat[clostestLabel].tolist()
#用不同的p值来选择最近邻点
dataset=loadDataset()
for i in range(1,6):
print findClostestPlot([1,1],dataset,i)
print "---------------------------------------------"
结果如下:
4
6
(0, 4.0, [5, 1])
---------------------------------------------
16
18
(0, 4.0, [5, 1])
---------------------------------------------
64
54
(1, 3.7797631496846193, [4, 4])
---------------------------------------------
256
162
(1, 3.5676213450081633, [4, 4])
---------------------------------------------
1024
486
(1, 3.446095064991105, [4, 4])
---------------------------------------------
made by zcl at CUMT
I know i can because i have a heart that beats