KNN:k-Nearest Neighbour,分类算法中最简单的算法之一,其核心思想是如果离某一个样本最近的k个样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。KNN不但可以预测分类,还可以做回归分析(预测具体的值)。

有 N 个已知分类结果的样本点,对新记录 r 使用KNN将其分类的步骤:
Step1:确定 k 值,确定计算距离的公式,比如欧氏距离
Step2:计算 r 和其他样本点之间的距离dird_{ir},其中i(1,N)i∈(1,N)
Step3:找到目前和 r 最接近的k个样本
Step4:将这 k 个样本中最多归属类别的分类标签赋予新记录 r,分类结束

常见的距离计算公式:
欧氏距离:dij=(xixj)2+(yiyj)2d_{ij}=\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}
曼哈顿距离:dij=xixj+yiyjd_{ij}=|x_i-x_j|+|y_i-y_j|
余弦相似度:dij=cos(OA,OB)d_{ij}=cos(\overrightarrow{OA},\overrightarrow{OB})
K最近邻(KNN)
K 的取值不宜过大,一般使用交叉验证来确定,本例中选择 k=10;

使用公式dij=(xixj)2+(yiyj)2d_{ij}=\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}计算 r 和所有样本点的距离;
将得到的距离升序排列,选出其中 k 个最小的距离,作为KNN样本;
K最近邻(KNN)
统计样本分类,确定 r 的分类。
K最近邻(KNN)

KNN的优缺点:

  • 优点
    • 原理简单,容易理解,容易实现
    • 重新训练代价较低
    • 时间、空间复杂度取决于训练集(一般不算太大)
  • 缺点
    • KNN属于lazy-learning算法,得到结果的及时性差
    • k值对结果影响大(试想一下k=1和k=N的极端情况)
    • 不同类记录相差较大时容易误判
    • 样本点较多时,计算量较大
    • 相对于决策树,结果可解释性不强

相关文章: