码迷,mamicode.com
首页 > 编程语言 > 详细

MLiA.第2章.k-近邻算法(kNN)

时间:2014-12-12 13:16:52      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   os   使用   sp   for   strong   on   文件   数据   

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

优缺点:

优点 精确度高、对异常值不敏感、无数据输入假定。
缺点 计算复杂度高、空间复杂度高。
使用数据范围 数值型和标称型。

例子:

电影名称 打斗镜头 接吻镜头 已知电影类型
California 3 104 爱情片
Gongfu 99 5 动作片

算法伪代码:

对未知类别属性的数据集中的每个点依次执行以下操作:

  1. 计算已知类别数据集中的点与当前点之间的距离.
  2. 按照距离递增次序排序.
  3. 选取与当前点距离最小的k个点.
  4. 确定前k个点所在类别的出现频率.
  5. 返回前k个点出现频率最高的类别作为当前点的预测分类。

算法实现细节:

  1. 利用矩阵计算,得到未知数据与已知类别数据集中每个数据之间的距离.
  2. 返回距离由大到小的数据的索引值.
  3. 利用索引值找到对应的标签(labels),计算前k个标签中不同标签对应的个数。并利用字典数据结构保存{标签:个数 , ......}.
  4. 按照个数由高到低排序字典,返回字典首位置的标签即为发生频率最高的元素标签。

其它知识:

一:从文本文件中解析数据.4列数据(最后一列是标签)

def file2matrix(filename):

    fr = open(filename)

    numberOfLines = len(fr.readlines())         

    returnMat = zeros((numberOfLines,3))       

    classLabelVector = []                       

    fr = open(filename)

    index = 0

    for line in fr.readlines():

        line = line.strip()

        listFromLine = line.split(‘\t‘)

        returnMat[index,:] = listFromLine[0:3]

        classLabelVector.append(int(listFromLine[-1]))

        index += 1

    return returnMat,classLabelVector

二:分析数据:使用Matlotlib创建散点图

三:准备数据:归一化数值

  newValue = (oldValue - min) / (max - min)

小结:k-邻近存储空间大,计算耗时大;另一个缺陷是它无法给出数据的基础结构信息,因此我们也无法知晓平均实例样本和典型实力样本具有什么特征。

 

 

 

 

 

MLiA.第2章.k-近邻算法(kNN)

标签:style   os   使用   sp   for   strong   on   文件   数据   

原文地址:http://www.cnblogs.com/cnblogs-learn/p/4159354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!