K近邻---Python---机器学习

来源:互联网 发布:变换发型的软件 编辑:程序博客网 时间:2024/06/08 13:47

KNN算法伪代码:

这里写图片描述

实现KNN算法基础程序:

"""Created on Tue Oct 11 19:05:33 2016@author: Administrator"""from numpy import *   #科学计算包import operator       #运算符模块def creatDataSet():    group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])  #创建数据集    labels=['A','A','B','B']                          #创建标签    return group,labels                                          #inX,用于分类的输入向量。即将对其进行分类。def classify0(inX,dataSet,labels,k):  # inX用于需要分类的数据,dataSet输入训练集######输入与训练样本之间的距离计算######     dataSetSize=dataSet.shape[0]    # 读取数据集行数,shape[1]则为列数     diffMat=tile(inX,(dataSetSize,1)) -dataSet                 #tile:numpy中的函数。tile将原来的一个数组,扩充成了4个一样的数组。                 #diffMat得到了目标与训练数值之间的差值。     sqDiffMat=diffMat**2            #各个元素分别平方       sqDistances=sqDiffMat.sum(axis=1)  # 每一个列向量相加,axis=0为行相加                                         #对应列相乘,即得到了每一个距离的平方     distances=sqDistances**0.5         #开方,得到距离。     sortedDistIndicies=distances.argsort()   #升序排列 #选择距离最小的k个点。     classCount={}     for i in range (k):         voteIlabel=labels[sortedDistIndicies[i]]  #排名前k个贴标签         classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #get(key,default=None),就是造字典 ######找到出现次数最大的点######  #以value值大小进行排序,reverse=True降序     sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),                             reverse=True) #key = operator.itemgetter(1),operator.itemgetter函数 #获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值     return sortedClassCount [0] [0]  #返回出现次数最多的value的key

欧氏距离计算:

     dataSetSize=dataSet.shape[0]                # 读取数据集     diffMat=tile(inX,(dataSetSize,1)) -dataSet  #做扩展     sqDiffMat=diffMat**2                        #平方       sqDistances=sqDiffMat.sum(axis=1)          #列向量累加                               distances=sqDistances**0.5                  #开方

选择距离最小的K个点:

classCount={}for i in range (k):                                        #排名前K个     voteIlabel=labels[sortedDistIndicies[i]]              #排名前k个贴标签     classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #分类计数                        sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)                                               #计数排序
 return sortedClassCount [0] [0]                        #返回排序次数最多的
0 0
原创粉丝点击