美文网首页
<机器学习实战笔记>_k-近邻算法

<机器学习实战笔记>_k-近邻算法

作者: 再见信仰 | 来源:发表于2017-05-14 21:49 被阅读10次

    简单的说k-近邻算法是通过测量不同特征值之间的距离进行分类.

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

    缺点:计算复杂度高,空间复杂度高.

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

    它的工作原理:需要有一个样本数据集,也成为训练样本集,并且样本集中每个数据都有标签(有明确的分类信息).输入没有标签的新数据后,将新数据的每个特征和样本集中每个数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签.一般来说我们只选取样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的正整数.最后,选择k个最相似数据中出现最多的分类作为新数据的分类.


    实施分类算法

    fromnumpyimport*

    importoperator

    #《机器学习实战》k—近邻算法实现

    # numpy是科学计算包,operator是运算符包

    #创建数据集和标签

    defcreateDataSet():

    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

    labels = ['A','A','B','B']

    returngroup,labels

    #实施kNN分类算法

    # 1.计算已知类别数据集中的点与当前点之间的距离

    # 2.按照距离递增次序排序

    # 3.选取与当前点距离最近的k个点

    # 4.确定k个点所在类别的出现频率

    # 5.返回k个点中出现频率最高的类别作为当前点的预测分类

    defclassify0(inX,dataSet,labels,k):

    #获取训练样本集的行数

    dataSetSize = dataSet.shape[0]

    #距离计算  使用欧式计算√(a0 - b0)^2 + (a1 - b1)^2

    diffMat = tile(inX,(dataSetSize,1)) - dataSet

    sqDiffMat = diffMat **2

    sqDistances = sqDiffMat.sum(axis=1)

    #选择距离最小的k个点

    distances = sqDistances **0.5

    sortedDistIndicies = distances.argsort()

    classCount = {}

    foriinrange(k):

    voteIlabel = labels[sortedDistIndicies[i]]

    classCount[voteIlabel] = classCount.get(voteIlabel,0) +1

    #排序

    # Python3.5中:iteritems变为items

    sortedClassCount =sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)

    returnsortedClassCount[0][0]

    这是用Python实现的k-近邻算法 ,windows下在cmd命令窗下可以执行.

    把路径切换到该.py文件路径下,cmd中输入python进入Python交互模式,然后输入下面的命令导入编辑的程序模块(kNN是上面模块的文件名):

    import kNN

    然后创建训练样本集:

    group,labels = kNN.createDataSet()

    预测数据所在分类:

    kNN.classify0([0,0], group, labels, 3)

    输出结果应该是'B',也可以改变输入[0,0]为其他值来测试.

    相关文章

      网友评论

          本文标题:<机器学习实战笔记>_k-近邻算法

          本文链接:https://www.haomeiwen.com/subject/mzxcxxtx.html