机器学习之K-近邻算法代码实现

来源:互联网 发布:npm 安装淘宝镜像 编辑:程序博客网 时间:2024/05/19 03:24

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述


以下是代码实现

#coding:utf-8'''Created on 2017-03-17@author: qiujiahao'''import numpy as npimport operatorfrom audioop import reversedef createDataSet():    #以矩阵的格式创造四个数据    group = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])    #为这四个点进行分类    labels = ["A","A","B","B"]    return group,labelsdef classify0(index,dataset,labes,k):    #index代表你想分类的值,dataset代表数据集,labels代表分类    #取出dataset有多少行    DatasetSize=dataset.shape[0]    #tile是将当前数据复制DatasetSize行,1列的矩阵    diffMax=np.tile(index, (DatasetSize,1)) - dataset    #对每个值乘以2的幂    sqdiffMax=diffMax**2    #将每行的数据进行加法运算,这样就算出了与每一个点的距离    sqDistance=sqdiffMax.sum(axis=1)    #再开根号    distance = sqDistance**0.5    #对这组距离值的索引进行排序,最小值的索引放在最前面    sortedDis= distance.argsort()    classCount = {}    for i in range(k):        #注意,此处是最难理解的        #当i为0的时候,取出的是距离最近的值的索引值,        #而由于createDataSet()函数里group和labels的索引是一一对应的        #也就是说,当你取出距离最近的值的索引值时,你去labes里正好可以取到这个值        #原来对应的类别,因为他们的索引值都是一一对应的        votelabel = labes[sortedDis[i]]        #字典里如果没有这个值则返回0,如果有则返回原来的值        classCount[votelabel] = classCount.get(votelabel,0)+1    #sorted的第一参数是可迭代的类型,用元素的莫一个属性作为比较的对象,reverse排序规则,True代表从小到大    #classCount.iteritems()代表返回字典的键值对,    #operator.itemgetter(1),获取对象的第1个域的值    #返回结果为[('B',2),('B',1)]    sortedclass = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)    return sortedclass[0][0]if __name__ == '__main__':    group,labels = createDataSet()    test = classify0([0.2,0.2],group,labels,3)    print test
B
0 0
原创粉丝点击