KNN分类算法代码


KNN分类算法,KNN能够採用Euclidean(欧几里得)、Manhattan(曼哈顿)、Mahalanobis(马氏距离)等距离用于计算。

此次代码用欧几里得求距离。

testdata是测试数据集,traindata是训练数据集,labels是类别集。

要提前知道的:

1、数据框DataFrame.shape(),得到的是该数据框的行列数

2、numpy.tile函数:

eg:a=array([1,5,6,4])

tile(a,2)

结果:

array([1, 5, 6, 4, 1, 5, 6, 4])

说明是在列上扩展,第二个参数是a的重复次数

tile(a,(2,1))

array([[1, 5, 6, 4],[1, 5, 6, 4]])
行上扩展,元组的一个参数是控制行数的重复,第二个是控制列数的重复次数

3、operator.itemgetter:用于获取对象的哪维的数据,另外,该函数不直接得到值,而是定义了一个函数,通过函数作用到对应的对象上才能得到值。


4、说numpy.argsort()和sorted()区别:numpy下argsort()结果是一个对调用该方法的数组进行升序后的索引值数组,原数组值不变,针对的是array


sorted()是内置函数,针对的是List或dict


from numpy import *

import operator
#knn分类算法
def knn(k,testdata,traindata,labels):
    #testdata和traindata维数不同时,将testdata扩展为traindata同样的维数
    #取出traindata行数
    traindatasize=traindata.shape[0]
    #将testdata在列方向上重复1次,行traindatasize次
    #求testdata和traindata差值
    dif=tile(testdata,(traindatasize,1))-traindata
    sqdif=dif**2
    #sum(axis=1)按行相加
    sumsqdif=sqdif.sum(axis=1)
    distance=sumsqdif**0.5
    #距离升序排序
    sortdistance=distance.argsort()
    count={}
    #选出距离最近的K个点的类别,统计是当前类别的次数
    for i in range(0,k):
        vote=labels[sortdistance[i]]
        count[vote]=count.get(vote,0)+1
    sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)
    return sortcount[0][0]

   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值