算法图解part10:K最近邻算法
1.K最近邻算法(k-nearest neighbours,KNN)
KNN(K-Nearest Neighbor)工作原理:
存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类对应的关系。输入没有标签的数据后,将新数据中的每个特征与样本集中数据对应的特征进行比较,提取出样本集中特征最相似数据(最近邻)的分类标签。
2 两个栗子
2.1 水果分类
将未知的水果进行分类:橙子还是橘子?
先建立坐标图,坐标轴分别代表颜色和大小:
放入需要判断类别的水果(按照两个特征坐标)
然后计算距离未知水果最近的K个值(这里令K = 3)
从图中可以看出,它最近的3个坐标点,有两个是橙子O,有一个点是G,故简单判断它为橙子。
2.2 创建推荐系统
这里对用户创建一个电影推荐系统。
将所有用户放入一个图表中:
图表中的位置确定了用户的电影喜好,因此喜好相似的用户距离较近。假设要为小兔子推荐电影,则可以将周围最邻近的K个用户喜好的电影推荐给他。
3 推出的几个核心要素
3.1 特征抽取
对水果分类来说:个头和颜色就是特征。确定两位用户的相似程度,如果是多组数字,那么这种距离指出的就是这多组数字之间的相似程度。
毕达哥拉斯公式(欧氏距离):
这里需要考虑到的是:归一化(normalization)和权重问题。
3.2 分类&回归
KNN中:
- 分类就是编组(水果分类等)
- 回归就是预测结果(如输入一个值,预测一个值)
如果要使用KNN的话,一定要研究余弦相似度(cosine similarity),余弦相似度不计算两个矢量的距离,而比较它们的角度。
公式如下:
3.3 挑选合适的特征
特征的标准:与要推荐的内容紧密相关的特征;
不偏不倚的特征(例如,如果只让用户给喜剧片打分,就无法判断他们是否喜欢动作片)。
4 机器学习
4.1 OCR
OCR指的是光学字符识别(optical character recognition),这意味着你可拍摄印刷页面的照片,
计算机将自动识别出其中的文字。
按识别数字为例, KNN:
- ①浏览大量的数字图像,将这些数字的特征提取出来。
- ②遇到新图像时,你提取该图像的特征,再找出它最近的邻居都是谁!
OCR的第一步是查看大量的数字图像并提取特征,这被称为训练(training)。大多数机器学习算法都包含训练的步骤:要让计算机完成任务,必须先训练它。
OCR算法提取线段、点和曲线等特征。
4.2 垃圾邮件过滤器:朴素贝叶斯分类器
使用数据对分类器进行训练:
假设现在收到一封主题为“collect your million dollars now!”的邮件,这是垃圾邮件吗?可以研究他的句子中的每个单词,看看它在垃圾邮件中出现的概率是多少。
例如,“million”这个单词在垃圾邮件中出现过,判定为垃圾邮件。
同样,前面水果分类的例子也可以使用朴素贝叶斯分类器:假设有一个又大又红的水果,它是柚子的概率是多少?
4.3 预测股票涨跌
即使选取合适的特征,使用机器学习进行预测股票市场的涨跌还是很难。
5.总结
- KNN用于分类和回归,需要考虑最近的邻居。
- 分类就是编组
- 回归就是预测数字
- 特征抽取意味着将物品转换为一系列可比较的数字
- 能否挑选合适的特征试管KNN算法的成败。
6.参考资料
《算法图解》第十章: