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]

   



阅读更多
文章标签: KNN
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

KNN分类算法代码

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭