KNN算法工作原理及实现

来源:互联网 发布:苹果电脑 mac地址 编辑:程序博客网 时间:2024/06/07 01:53

工作原理:训练数据中每个数据都存在标记(分类信息),当输入新样本后,将新样本的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最想是数据的分类信息。一般来说,我们只选择样本集数据中前k个最相似的数据。最后,选择k个最相似数据出现次数最多的分类。

代码实现思路:第一:计算新样本点与训练数据点的距离

                        第二:将距离按照递增的顺序排序

                        第三:选取距离最小的k个点

                        第四:确定前k个点所在类别出现的频率

                        第五:将距离按照递增的顺序排序

代码实现:

#encoding:utf-8import numpy as npfrom numpy import *import operatordef classify(inX, dataSet, labels, k):    # 距离的计算    # 获取数据的行数    dataSetSize = dataSet.shape[0]    # 实现向量的相减    diffMat = np.tile(inX,(dataSetSize,1))-dataSet    # 实现向量中各值的平方    diffMat1 = diffMat**2    # 计算行向量的总值,即距离的平方    diffMatSum = diffMat1.sum(axis=1)    # 得到距离    distances = diffMatSum**0.5    # 将得到的距离排序,并且返回的是位置    diffMatsort = distances.argsort()    # 定义一个新的词典    classcount = {}    # 选择距离最小的k个点    for i in range(k):        #获取不同位置的距离的标记        sortLabels = labels[diffMatsort[i]]        # 统计类出现的次数        classcount[sortLabels] = classcount.get(sortLabels,0)+1    # 将类出现的次数逆序排序    sortedClasscount = sorted(classcount.items(),key = operator.itemgetter(1),reverse = True)    # 返回最高的次数对应的类即可

0 0
原创粉丝点击