python实现的 K-近邻算法代码详细解释

一、k近邻算法概述

k近邻算法采用测量不同特征值之间的距离方法进行分类。

优点:精度高、对异常值不敏感、无数据输入假定。

缺点:计算复杂度高、空间复杂度高。

适用数据范围:数值型和标称型。

二、算法一般流程

1、收集数据:可以使用任何方法。

2、准备数据:距离计算所需要的数值,最好是结构化的数据格式。

3、分析数据:可以使用任何方法。

4、训练算法:k近邻无此步骤。

5、测试算法:计算错误率。

6、使用算法:首先输入样本数据和结构化的输出结果,然后运行k近邻算法判定输入数据分别属于哪一类分类,然后应用对计算出的分类进行处理。

三、knn伪代码

       1.计算已知类别数据集中的点与需要预测点之间的距离;

       2.按照距离进行递增排序;

       3.选择最近的k个点;

       4.统计k个点中class最多的class

       5.返回预测结果

四、具体代码及解释

def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]#shape函数它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。它的输入参数可以使一个整数表示维度,也可以是一个矩阵
    diffMat = tile(inX, (dataSetSize,1)) - dataSet#tile函数他的功能是重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组
    sqDiffMat = diffMat**2

    sqDistances = sqDiffMat.sum(axis=1)#sum是求和函数axis=1是矩阵的向量相加
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()#argsort排序   
    classCount={}          
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1#get() 函数返回指定键的值,如果值不在字典中返回默认值
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)#sorted函数sorted(iterable,cmp,key,reverse)参数:iterable可以是list或者iterator;cmp是带两个参数的比较函数;key 是带一个参数的函数;reverse为False或者True
    return sortedClassCount[0][0]

你可能感兴趣的:(python)