文档介绍:第2章k-近邻算法(kNN)
引言
本章介绍kNN算法基础理论和怎样使用距离测量方法分类物品。 其次, 将使用python从文本文件中导入并解析数据, 然后, 当存在很多数据起源时, 怎样避免计算距离时可能碰到部分常见错识。
k-近邻算法概述
k-近邻(k Nearest Neighbors)算法采取测量不一样特征之间距离方法进行分类。 它工作原理是: 存在一个样本数据集合, 而且样本集中每个数据全部存在标签, 即我们知道样本每一数据和所属分类对应关系。 输入没有标签新数据后, 将新数据每个特征和样本集中数据对应特征进行比较, 然后算法提取样本集中特征最相同数据分类标签。 通常来说, 我们只选择样本数据集中前k个最相同数据, 这就是k-近邻算法中k出处, 通常k是小于20整数。 最终, 选择k个最相同数据中出现次数最多分类, 作为新数据分类。
k-近邻算法优点是精度高, 对异常值不敏感, 无数据输入假定; 缺点是计算复杂度高、 空间复杂度高。 适适用于数值和离散型数据。
准备知识: 使用python导入数据
首先, , 然后添加下面代码:
from numpy import * #引入科学计算包
import operator #经典python函数库。 运算符模块。
#创建数据集
def createDataSet():
    group=array([[,],[,],[0,0],[0,]])
    labels=['A','A','B','B']
    return group,labels
测试: >>> import kNN
>>> group,labels=()
注意: , 不然提醒找不到文件。
实施kNN算法
使用k-近邻算法将每组数据划分到某个类中, 其伪代码以下:
对未知类别属性数据集中每个点依次实施以下操作:
计算已知类别数据集中点和目前点之间距离;
根据距离递增交序排序;
选择和目前点距离最小k个点;
确定前k个点所在类别出现频率;
返回前k个点出现频率最高类别作为目前点估计分类。
用欧氏距离公式, 计算两个向量点xA和xB之间距离:
比如, 点(0, 0)和(1, 2)之间距离计算为:
python函数classify( )程序以下所表示:
#算法关键
#inX: 用于分类输入向量。 立即对其进行分类。
#dataSet: 训练样本集
#labels:标签向量
def classfy0(inX,dataSet,labels,k):
    #距离计算
#得到数组行数。 即知道有多个训练数据
    dataSetSize =[0]
#用欧氏距离公式计算距离
    diffMat     =tile(inX,(dataSetSize,1))-dataSet #将inX扩展为4行2列向量, 两个矩阵相减
sqDiffMat   =diffMat**2 #平方
sqDistances =(axis=1) #asis=1是按行相加
distances   =sqDistances** #开方
sortedDistIndicies=() #升序排列
    #选择距离最小k个点。
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]
        classCount[voteIlabel]=(voteIlabel,0)+1
   
#排序, 降序
    sortedClassCount=sorted((),key=(1),reverse=True)
    return sortedClassCount[0][0]
测试:>>>kNN .classify0([0,0],group, labels,3)
: 使用k-近邻算法改善聚会网站配对结果
在聚会网站上使用k-近邻算法步骤:
: 提供文本文件。