统计学习方法第三章例3.1代码实践

统计学习方法第三章例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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值