[机器学习算法系列] KNN (k-近邻算法)

[机器学习算法系列] KNN (K-Nearest Neighbor, k-近邻算法)


算法分类

  • 监督学习

目的

  • 对数据进行分类
  • eg. 下图中蓝色点是属于绿色阵营还是红色阵营?

优缺点分析

优点:

  • 精度高
  • 对异常值不敏感

缺点 :

  • 计算复杂度十分高

算法核心

  • 依靠欧式距离公式来计算距离,可以应用到多维

    d=sqrt( ∑(xi1-xi2)^2 ) 这里i=1,2..n

  • k 的意义: 取离目标点最近的k个点

KNN 流程

  • 数据准备:
    • 样本点集
    • 样本类别
  • 算法过程:
    • 每个预测点计算与所有样本点之间的距离 (这就是为什么算法复杂度高, 数据不可复用,没有训练意义)
    • 取离目标点最近的k个样本点,选择k中数量最多的类型作为目标点的类别

伪代码

/**
parameters:
inputVec: 输入向量
dataSet : 原始数据集(基本元素为样本向量)
dataClassVect: 样本类别向量
k : 取最近的k个点
return :
类别
*/
classify(inputVec, dataSet, dataClassVect, k):
//key->距离 value->类别
distances = {}
for i=0 to dataSet.len:
distances.add(calculateDistance(intputVec, data), dataClassVect[i])
distances.sortByKey_asc()

//key->类别 value->出现次数
classCount = {}
for i=0 to k:
classCount[distances[i]]++
classCount.sortByValue_desc()
return classCount.first().key()

posted @ 2014-10-19 11:46  Harrd  阅读(196)  评论(0)    收藏  举报