Data structure and Algorithm
  • 序言
  • 大O表示法
  • 递归
  • 线性表
    • 数组
    • 链表
    • 栈
    • 队列
  • 散列表
    • 哈希表
  • 树
    • 简介
    • 前缀树(字典树)
    • 二叉树
  • 图
    • 广度优先搜索
    • 狄克斯特拉算法
  • 算法-查找
    • 二分查找
    • K最近邻算法
    • 贪婪算法
    • 动态规划算法
  • 算法-排序
    • 交换类排序法
    • 插入类排序法
  • 算法-搜索
    • Untitled
  • 算法-复杂度分析
    • Untitled
  • 算法-字符串匹配
    • Untitled
    • Untitled
  • 算法-基本算法思想
    • 其他算法
Powered by GitBook
On this page
  • 应用场景
  • 特征抽取
  • 回归
  • 挑选合适的特征
  • 余弦相似度
  • 小结

Was this helpful?

  1. 算法-查找

K最近邻算法

Previous二分查找Next贪婪算法

Last updated 6 years ago

Was this helpful?

应用场景

  1. 分类。推荐系统的设计,比如电影推荐系统,淘宝购物推荐系统,总之应用广泛,常用于分类,比如将人群分类,构建用户画像;

  2. 回归。面包店明天应该做多少个面包?利用明天的特征来算出一个数字。

  3. OCR,光学字符识别,提取特征,找出最近的邻居。

  4. 垃圾邮件过滤。用到的算法是朴素贝叶斯分类器。

特征抽取

在前面的图表中,相似的用户相距较近,但如何确定两位 用户的相似程度呢?这就需要用到特征抽取了。

对每种类型的喜好都对应着特定的数字,然后每个人都对应着五个数字,之后就可以利用距离公式,计算并表示出人与人之间的相似程度。

回归

假设你不仅要向Priyanka推荐电影,还要预测她将给这部电影打多少分。为此,先找出与她 最近的5个人。 顺便说一句,我老说最近的5个人,其实并非一定要选择5个最近的邻居,也可选择2个、10 个或10 000个。这就是这种算法名为K最近邻而不是5最近邻的原因!

你求这些人打的分的平均值,结果为4.2。这就是回归(regression)。你将使用KNN来做两项 基本工作——分类和回归:

  1. 分类就是编组;

  2. 回归就是预测结果(如一个数字)。

挑选合适的特征

使用KNN时,挑选合适的特征进行比较至关重要。所谓合适的特 征,就是:

  1. 与要推荐的电影紧密相关的特征;

  2. 不偏不倚的特征(例如,如果只让用户给喜剧片打分,就无法判断他们是否喜欢动作片)。

余弦相似度

余弦相似度 前面计算两位用户的距离时,使用的都是距离公式。还有更合适的公式吗?在实际工作中, 经常使用余弦相似度(cosine similarity)。假设有两位品味类似的用户,但其中一位打分时更 保守。他们都很喜欢Manmohan Desai的电影Amar Akbar Anthony,但Paul给了5星,而Rowan只 给4星。如果你使用距离公式,这两位用户可能不是邻居,虽然他们的品味非常接近。 余弦相似度不计算两个矢量的距离,而比较它们的角度,因此更适合处理前面所说的情况。 本书不讨论余弦相似度,但如果你要使用KNN,就一定要研究研究它!

小结

KNN用于分类和回归,需要考虑最近的邻居。

  1. 分类就是编组。

  2. 回归就是预测结果(如数字)。

  3. 特征抽取意味着将物品(如水果或用户)转换为一系列可比较的数字。

  4. 能否挑选合适的特征事关KNN算法的成败。