算法图解part10:K最近邻算法

1.K最近邻算法(k-nearest neighbours,KNN)

KNN(K-Nearest Neighbor)工作原理:
存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类对应的关系。输入没有标签的数据后,将新数据中的每个特征与样本集中数据对应的特征进行比较,提取出样本集中特征最相似数据(最近邻)的分类标签。

2 两个栗子

2.1 水果分类

将未知的水果进行分类:橙子还是橘子?
先建立坐标图,坐标轴分别代表颜色和大小:
算法图解part10:K最近邻算法
放入需要判断类别的水果(按照两个特征坐标)
算法图解part10:K最近邻算法
然后计算距离未知水果最近的K个值(这里令K = 3)
算法图解part10:K最近邻算法
从图中可以看出,它最近的3个坐标点,有两个是橙子O,有一个点是G,故简单判断它为橙子。

2.2 创建推荐系统

这里对用户创建一个电影推荐系统。
将所有用户放入一个图表中:
算法图解part10:K最近邻算法
图表中的位置确定了用户的电影喜好,因此喜好相似的用户距离较近。假设要为小兔子推荐电影,则可以将周围最邻近的K个用户喜好的电影推荐给他。
算法图解part10:K最近邻算法

3 推出的几个核心要素

3.1 特征抽取

对水果分类来说:个头和颜色就是特征。确定两位用户的相似程度,如果是多组数字,那么这种距离指出的就是这多组数字之间的相似程度。

毕达哥拉斯公式(欧氏距离):

算法图解part10:K最近邻算法

这里需要考虑到的是:归一化(normalization)权重问题。

3.2 分类&回归

KNN中:

  • 分类就是编组(水果分类等)
  • 回归就是预测结果(如输入一个值,预测一个值)

如果要使用KNN的话,一定要研究余弦相似度(cosine similarity),余弦相似度不计算两个矢量的距离,而比较它们的角度。

公式如下:
算法图解part10:K最近邻算法

3.3 挑选合适的特征

特征的标准:与要推荐的内容紧密相关的特征;
不偏不倚的特征(例如,如果只让用户给喜剧片打分,就无法判断他们是否喜欢动作片)。

4 机器学习

4.1 OCR

OCR指的是光学字符识别(optical character recognition),这意味着你可拍摄印刷页面的照片,
计算机将自动识别出其中的文字。

按识别数字为例, KNN:

  • ①浏览大量的数字图像,将这些数字的特征提取出来。
  • ②遇到新图像时,你提取该图像的特征,再找出它最近的邻居都是谁!

算法图解part10:K最近邻算法
OCR的第一步是查看大量的数字图像并提取特征,这被称为训练(training)。大多数机器学习算法都包含训练的步骤:要让计算机完成任务,必须先训练它。

OCR算法提取线段、点和曲线等特征

4.2 垃圾邮件过滤器:朴素贝叶斯分类器

使用数据对分类器进行训练:
算法图解part10:K最近邻算法
假设现在收到一封主题为“collect your million dollars now!”的邮件,这是垃圾邮件吗?可以研究他的句子中的每个单词,看看它在垃圾邮件中出现的概率是多少。
例如,“million”这个单词在垃圾邮件中出现过,判定为垃圾邮件。

同样,前面水果分类的例子也可以使用朴素贝叶斯分类器:假设有一个又大又红的水果,它是柚子的概率是多少?

4.3 预测股票涨跌

即使选取合适的特征,使用机器学习进行预测股票市场的涨跌还是很难。
算法图解part10:K最近邻算法

5.总结

  • KNN用于分类和回归,需要考虑最近的邻居。
  • 分类就是编组
  • 回归就是预测数字
  • 特征抽取意味着将物品转换为一系列可比较的数字
  • 能否挑选合适的特征试管KNN算法的成败。

6.参考资料

《算法图解》第十章: