k-近邻算法(python)

k-近邻算法(KNN)的原理:采用测量不同特征值之间的距离方法进行分类

定义:存在一个样本数据集,并且每个数据集都有标签,我们称之为训练样本集。输入新的样本数据,通过与训练样本集中的特征进行比较,算法选择样本特征最相似数据(最近邻)的数据标签。 通常选取样本数据集中前k个最相似的数据中出现次数最多的分类,即为样本的分类。

k-近邻算法的一般流程:

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

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

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

4)训练算法:此步骤不适用于k-近邻算法

5)测试数据:计算错误率

6)使用算法

 1.使用Python导入数据

from numpy import *
import operator #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

把上述代码保存为KNN.py,打开终端,改变当前路径到存储KNN.py文件的位置,然后导入:

>>>import kNN

在python命令提示符下输入下述指令:

group,labels=kNN.creatDataSet()

2.从文本文件中解析数据

def classify0(inx,dataSet,labels,k):#inx:用于分类的输入向量  dataSet:输入的训练样本集 labels:标签向量  k:用于选择最近邻居的数目
    #距离计算
    dataSetSize = dataSet.shape[0]
    diffMat=tile(inX,(dataSetSize,1))-dataSet #把InX复制为dataSetSize行,1列
    sqDiffMat=diffMat**2
    sqDistances=sqDiffMat.sum(axis=1)
    distances=sqDistances**0.5
    #对得到的距离按从小到大的次序排序
    sortedDistIndicies=distances.argsort()
    #选择距离最小的k个点
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1    
    sortedClassCount=sorted(classCount.iteritems(),
key=operator.itemgetter(1),reverse=True)#获取第二列的数据,逆序排序(从大到小),返回频率最高的元素标签

    
    

tile函数的用法:重复某个数组 

>>> from numpy import *
>>> a=[0,1,2]
>>> b=tile(a,2)
>>> b
array([0, 1, 2, 0, 1, 2])


>>> b=tile(a,(1,2))
>>> b
array([[0, 1, 2, 0, 1, 2]])


>>> b=tile(a,(2,1))
>>> b
array([[0, 1, 2],
       [0, 1, 2]])

下一节我们将在现实生活中应用k-近邻算法。

猜你喜欢

转载自blog.csdn.net/qq_39394809/article/details/85054119