机器学习算法之k近邻模型算法原理及实现

1 算法原理

1.1 kk近邻算法

算法1 kk近邻算法
**输入:**训练数据集T=[(x1,y1),,(xN,yN)),xiXRn,yiY={c1,,cK}T=\left[\left(x_{1}, y_{1}\right), \cdots,\left(x_{N}, y_{N}\right)\right), x_{i} \in X \subseteq R^{n}, y_{i} \in Y=\left\{c_{1}, \cdots, c_{K}\right\},实例特征向量xx

  1. 根据给定的距离度量(欧氏距离),在训练集中找到与xx最近的kk个点,包括这kk个点的区域记为Nk(x)N_{k}(x)
  2. Nk(x)N_{k}(x)中根据分类决策规则(如多数表决)决定xx的类别yy

输出: 实例xx所属的类别yy
解释:
在这里插入图片描述

.图1.KNN算法
如图,训练集分为两类:蓝色,红色。·绿色为待预测数据。输入变量为2维向量,颜色对应输出的标签。设置k=3k=3(对应实心圆圈内),待预测数据被预测为红色。若k=5k=5(对应虚线圆圈内),被预测为蓝色。

1.2 kk近邻模型

1.2.1 模型

kk近邻方法没有显式的模型。

1.2.2 距离度量

LpL_{p}距离(明可夫斯基距离)
pp范数xxip\left\|x-x_{i}\right\|_{p}来度量,LpL_{p}距离定义如下:
Lp(xi,xj)=(l=1nxi(l)xj(l)p)1p L_{p}\left(x_{i}, x_{j}\right)=\left(\sum_{l=1}^{n}\left|x_{i}^{(l)}-x_{j}^{(l)}\right|^{p}\right)^{\frac{1}{p}}
在这里插入图片描述

图2 明可夫斯基距离
  1. 曼哈顿距离:当p=1p=1时,为曼哈顿距离,如图中,在小正方形上的各点距离原点的曼哈顿距离相等。
  2. 欧式距离:当p=2p=2时,为欧氏距离,如图,在圆上的各点与原点的欧氏距离相等。
  3. 切比雪夫距离:当p=p=\infty时,为切比雪夫距离。对应大正方形上各点到原点的切比雪夫距离相等。

1.2.3 kk值的选择

kk值的选择会对kk近邻算法的结果产生重大的影响。kk值的减小,会使预测结果非常依赖近邻点,如近邻点刚好是噪声,预测会出错。kk值的减小意味着模型变得复杂,容易发生过拟合。
选择较大的kk值,会导致模型变得简单。这样想,若kk取全部样本的数量,模型最终变成一个统计分类占比的简单模型。

1.2.4 分类决策规则

对于分类问题,一般采用多数表决,在最近的kk个邻近点中,属于哪一类的点最多,就将该预测点判定为该类。对应的经验风险为:
1kxiNk(x)I(yicj) \frac{1}{k} \sum_{x_{i} \in N_{k}(x)} I\left(y_{i} \neq c_{j}\right)
上述公式含义:
如图1,取k=3k=3(对应实线圆),用唯一的类别给该区域内的点打标签,假如标签为红色,考察训练集上的损失值,易得:13(I(y1)+I(y2)+I(y3))=13\frac{1}{3}\left(I\left(y_{1} \neq 红\right)+I\left(y_{2} \neq 红\right)+I\left(y_{3} \neq 红\right)\right)=\frac{1}{3},以上所得为区域中的点判定为红色的损失。当判定为蓝色时,损失为13(I1+I2+I3)=23\frac{1}{3}\left(I_{1}+I_{2}+I_{3}\right)=\frac{2}{3}。取损失值最小的类别,得到红色类别,故将该区域内所有的点都判定为红色。

1.2.5 kk近邻算法的实现:kdkd

本节介绍了一个kdkd树存储数据的方法,对于每一个要预测的实例,都需要寻找和其特征向量距离最近的那些训练集中的实例,当特征向量维度很高时,这种搜索很耗时,这就需要一种特殊的数据结构,不需要遍历训练集中的每一个实例。

1.3总结

第2章和第3章介绍的都是分类问题的方法,这两种方法都可以用于解决二分类问题,针对输入变量是连续变量。下面对比两种方法的不同:

  1. 第2章的感知机模型,需要使用所有的训练集数据,找到一个可以分割两类的超平面,并要求数据是线性可分的,当然对于数据不是线性可分时,也有相应的感知机算法。当找到这个超平面,训练数据集就可以不再需要了,仅根据该超平面,就可以判定新实例的类别。总的来说,感知机模型用全部数据找到了一个全局的结构,保留这个结构并遗弃训练集数据,用该结构预测新实例。
  2. 第3章的近邻算法,并没有用全部数据寻找一个结构,所用的是一个局部的信息,所找的是要预测的这个实例离该点最近的那些点,然后使用这些实例进行预测。当使用局部信息时,需要存储全部的训练数据集。要如何在这两种算法中选择呢?当数据具有线性可分结构时,用感知机模型更好,因为计算简单,但当数据不是线性可分时,只能使用预测点周围的信息(局部信息)进行分类判定,此时近邻算法更好,该算法对整个数据集的结构(即模型的结构)没有那么强的假设。

2 算法实现

发布了86 篇原创文章 · 获赞 1 · 访问量 1434
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览