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

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


算法分类

  • 监督学习

目的

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

优缺点分析

优势:算法

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

缺点 :机器学习

  • 计算复杂度十分高

算法核心

  • 依靠欧式距离公式来计算距离,能够应用到多维学习

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

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

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()
相关文章
相关标签/搜索