说明:《grokking algorithms》算法讲解的非常深入浅出,用好多幅图以及日常常用的例子讲算法讲解的非常好,若是英文还可以的话,建议看英文原版,非常喜欢作者的写作风格,将复杂的算法用简单的方式描述出来,真的好厉害!!

第十章. K-邻近算法

················································································ ···············································

在本章中:
你会学到怎么利用邻近算法来构建一个分类系统
学习到特质提取
学到回归,预测数值,预测明日股市或者电影票房
学习K-邻近算法的适用场景和不适用场景
···································································································································

区分桔子和葡萄柚

比如这个水果,这是桔子还是葡萄柚?我们知道,葡萄柚更大更红。

图10-1
我的思路大概是这样的:在我的头脑中有一张图。

图10-2
通常来说,更大更红的水果是葡萄柚。这个水果很大而且很红,所以极有可能是葡萄柚。但是若是一个水果既不算大也不算小,即非很红也非不红呢?

图10-3

你可以区分出它是什么水果吗?有一种方法是看它的邻居,看离它最近的3个邻居是什么水果。

图10-4

若多数邻居是桔子,那么它极有可能是桔子。恭喜你,你刚才利用的就是K-邻近算法,这个算法非常简单。

图10-5
1.你需要区分一种新的水果
2.查看离它最近的邻居是什么水果
3.大多数邻居是桔子,那么它极有可能是桔子。

KNN(邻近)算法简单但是非常有效,你若是需要区分什么,可以先试试KNN算法,让我们来看个现实的例子。

建一个评价推荐系统

假设你是Netflix的员工,你需要为你的用户做一个评价系统,在一定程度上,它和葡萄柚问题非常像。
你可以给用户画像

图10-6
对用户根据相似度画点。若是用户的口味很接近,那么代表它们的点也是很接近的。假设你要为Priyanka推荐电影,你可以找离她最近的五个用户。

图10-7

Justin、JC、Lance和Chris看电影的口味很相似,因此他们喜欢的电影,Priyanka多半也喜欢。
当你有一幅图时,你创建一个推荐系统就会很简单,如果Justin喜欢一部电影,就可以将这部电影推荐给Priyanka。

图10-8
但是还有一个问题没有考虑,这张图是根据用户的相似度来画的,你怎样来标示用户的相似度呢?

特征提取

在葡萄柚这个例子中,你比较的是它们有多大和它们有多红,那么你其实比较的是大小和颜色,现在,假设你有3种水果,你怎么提取它们的特征呢?

图10-9
你可以用图中的点来标示它们。

图10-10
从图中可以直观的看出,A和B相似。我们可以计算它们的相似程度及计算它们两点间的距离。可以利用平方根公式。

图10-11
例如,这是A点和B点的距离。

图10-12
A和B间的距离为1,可以计算A、C和BC间的相互距离。

图10-13
距离计算论证了我们看到的:水果A和水果B相似。
假设你在比较Netflix网站的用户,你需要为他们画像,你需要将他们标示成一系列的坐标,像对水果做的那样。

图10-14
当你可以用图标示用户时,你就可以计算他们的距离了,怎样将用户描述成数字集合呢?当用户注册Netflix账号时,他们会为一类电影打分(根据他们的喜爱程度),对于每一个用户,你现在有了他们的评价数据。

图10-15
Priyanka和Justin喜欢爱情片,讨厌恐怖片,Morpheus喜欢动作片,讨厌爱情片(他因为一部影片中有浪漫情节而讨厌这部电影),还记得怎么区分葡萄柚和桔子的吗?我们用了2个数字来区分,现在,一个用户用5个数字组成的集合来区分。

图10-16
数学家可能会说,现在不是二维空间计算距离了,我们要在五维空间计算距离,不过公式是一样的。只是将2个数字的集合换成了5个数字的集合。

图10-17
这个距离是灵活的,你可以有数百万个数字组成的集合,但是依然可以用这个距离公式来求解距离,你可能会好奇:“当计算5个数字时,距离是什么意思呢?”,这里的距离告诉我们这些数的相似程度。

图10-18
这是Priyanka和Justin的相似程度。Priyanka和Justin的相似程度很高。Priyanka和Morpheus相似吗?让我们来计算一下
你算对了吗?Priyanka和Morpheus的相似程度为24.距离告诉我们Priyanka和Justin的口味比Morpheus和Justin的口味更相似。
太棒了,现在向Priyanka推荐电影变得容易了。若是Justin喜欢某部电影,那么推荐给Priyanka,反之亦然。你现在做了一个电影推荐系统。
若你是Netflix的用户,它会一直告诉你“要评价更多的电影,你评价的越多,那么你获得的推荐越准确”。现在,你知道原因了,越多的电影评分,那么Netflix计算你和其他用户的相似度就会越准确。

练习
重点内容
10.1 在Netflix例子中,我们用距离公式计算了两个用户的不同,但是并不是所有的用户评分标准都是一样的。比如有两个用户,Yogi和Pinky,他们喜欢的电影类型是一样的,但是Yoyi对喜欢的电影打5分,但是Pinky只对非常非常喜欢的电影打5粉。他们实际上喜欢的电影是一样的,但是根据距离公式的计算结果,他们只是相近。你在做推荐时怎么处理这种不同标准的打分方式?

10.2 假设Netflix有一个“相互影响者组”,例如Quentin和Tarantino是相互影响的人。所以他们的评价计数比一般的用户高,你怎么调整推荐系统让它更偏向于这类“相互影响者”的组?

回归

假设你不止要评价一部影片。你需要猜测Priyanka是否喜欢某部电影,找出离她最近的5个人。
顺便说一句,我们选择离她最近的5个人,数字5没有什么特殊的,你可以选择数字2,10或者10000.这也是为什么算法叫K-邻近算法而不是叫5-邻近算法的原因。

图10-19
假设你需要对电影《Pitch Perfect》的评分做猜测,Justin、JC、Joey、Lance和Chris会对它打几分呢?

图10-20
你可以求出他们给的数据的平均分,即4.2星,这就叫做回归。这是K-邻近算法的非常基础的2个事情—-分类和回归。
分类=归为一组
回归=预测反应(比如数值)

回归非常有用,假设你在伯克利经营一家蛋糕房。你每天做新鲜的面包,你每天需要预测做多少个面包,你有以下特征项集合
天气好坏(1=是, 0=否)
周末或假日?(1=周末或假日,0是其他)
有比赛吗?(1=是,0=否)
你知道过去的日子里每天出售了多少面包以及上面的各项数据。


图10-21

今天是周末而且天气不错,根据以前的数据,我们要做多少个面包呢?我们利用K-邻近算法。K=4
第一,找出离这个点最近的4个点
(4, 1,0)=?

图10-22
A、B、D和E离(4, 1, 0)点更近。
对这四个点卖出的面包求平均值,得到了218.75,我们得到了今天要做的面包数目。

余弦相似度

至今为止,我们利用距离公式计算两个用户的口味偏差,这是最适合的吗?在现实中经常使用的是余弦相似度。假设两个用户很相似,但其中一个打分很保守,他们都很喜欢Manmoham Desai的《Amar Akbar Anthony》这首歌,但Rowan只给了4个星,Paul给了5个星。若是利用距离公式,他们的喜好(口味)不相似。尽管他们是喜好相似的用户。
余弦相似度不是通过距离来计算,它比较两项的角度。处理这类问题,余弦相似度更适合。本书中不讲述余弦相似度,但若是你使用K-邻近算法,可以试着学习并使用它。

选好特征项

图10-23
为了获得推荐,你要求用户对不同的电影打分。若是你要求他们对小猫的照片打分呢?你会看到所有的用户都是相似的,那么这是一个差的推荐系统,因为这与电影的喜好(口味)没有半毛钱的关系。
或者你要求用户评价电影,这样你可以给他们做推荐,但你只要去他们对《托尼故事》、《托尼故事2》和《托尼故事3》打分,这些也不会告诉你用户的喜好的。
当你使用K-邻近算法时,选择好的特征项是非常重要的。好的特征项意味着:
与你要评价的电影直接相关的项
没有倾向的特征(比如,你若是只要求用户对喜剧打分,则他们无法告诉你他们是否喜欢动作片)

你认为对电影打分是好的评价方式吗?可能我对《The wire》的打分高于《House Hunters》,但是我却花更多的时间来观看《House Hunters》,你怎样来升级你的推荐系统呢?

回到面包店:你能想出2种提升或降低面包销量的特征吗?比如你在报纸上做广告会增加销量,或者你需要在周一多做面包。

练习
重点内容
10.3 Netflix有数百万个用户,我们利用离用户最近的5个用户来构建评价推荐系统,这个是不是很low?或者很High?

机器学习简介

K-邻近算法是非常有用的算法,而且为你打开了机器学习的大门,你已经看到了机器学习的一个例子:创建推荐系统,让我们来看其他例子。

图10-24

OCR
OCR是光学字符识别的简称。也就是说,你对一个页面拍一张照片,计算机会自动把它转变成文本。Google利用OCR来识别图书:OCR是怎么工作的,例如,识别数字7

图10-25
它是怎么自动识别出的呢?你可以利用K-邻近算法
1.浏览多个数字的图片,将能区分数字的特征点找出来。
2.当你获得一个新图片时,提取这个图片的特征,然后找离这个图片最近的邻居们。

这个问题和区分桔子 VS 葡萄柚的例子很像。一般来说,OCR算法利用点、直线和曲线作为特征项。

图10-26
这样,当你拿到一个新的字符时,你就可以从中找到这些特征量了。

在光学识别(OCR)中,特征提取比水果的例子难多了,但是复杂的技术是以简单想法为基础的。比如K-邻近算法,你可以利用同样的想法来做语音识别或人脸识别,当你向facebook上传一张图片时,自动为这些照片打标签就是机器学习的一种实际应用。

光学字符识别(OCR)的第一步,当你浏览多个数字的照片并提取特征时,叫做训练。大多数的机器学习算法都有训练的环节:在你的电脑开始工作前,你需要先训练它,下一个例子包含垃圾邮件过滤,依然包含训练环节。

创建垃圾邮件过滤系统
垃圾邮件过滤使用了另一个简单的算法叫做朴素贝叶斯分类器。首先,你利用朴素的贝叶斯分类器训练一些数据。

图10-27

假设你收到一封邮件,标题为“现在给我1000,000美元”,你可以把它按词断句。这样,对于每个单词,判断它出现在垃圾邮件中的可能性。比如,在这个简单的模型中,百万出现在了垃圾邮件中。朴素贝叶斯分类器将可能的垃圾邮件找出来。这个和K-邻近算法很像。

例如,你利用朴素贝叶斯分类器来区分水果。你又一种水果既大且红,那么它很有可能是葡萄柚?这里有一个非常有效且简单的算法。我们喜欢这些算法。

图10-28

预测股市

这里有个对机器学习来说很难的事情:预测股市上涨或下跌。你怎么在股票市场找到好的特征点?假设你说股价昨天下跌了,今天要上涨,这是一个好的特征项吗?或者你说五月份股价会一直跌,这些会有效吗?没有一条绝对正确的方式可以用过去的数据来预测未来的走向。预测未来很难,尤其是当有很多变数存在时,预测未来几乎是不可能的。

回顾

我希望学完本章后,你有个印象,利用K-邻近算法可以处理很多不同的事情。机器学习是非常有趣的一个领域。你可以深挖,若是你喜欢的话。
K-邻近算法需要归类和回归,需要寻找K个最邻近的点;
分类=将不同类型分组
回归-预测反应(比如数字)
特征提取的意思是将事物(如水果或用户)抽象成数字标示的集合
在K-邻近算法中,选择好的特征项是非常重要的。

grokking algorithms K-nearest neighbors第十章 K-邻近算法 中文翻译相关推荐

  1. KNN(K Nearest Neighbors)分类是什么学习方法?如何或者最佳的K值?RadiusneighborsClassifer分类器又是什么?KNN进行分类详解及实践

    KNN(K Nearest Neighbors)分类是什么学习方法?如何或者最佳的K值?RadiusneighborsClassifer分类器又是什么?KNN进行分类详解及实践 如何使用GridSea ...

  2. k Nearest Neighbor Algorithm

    k Nearest Neighbor Algorithm k Nearest Neighbor(kNN) algorithm算法和k-Means算法一样,都是简单理解,但是实际效果出人意料的算法之一. ...

  3. 机器学习之深入理解K最近邻分类算法(K Nearest Neighbor)

    [机器学习]<机器学习实战>读书笔记及代码:第2章 - k-近邻算法 1.初识 K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有 ...

  4. knn 邻居数量k的选取_选择K个最近的邻居

    knn 邻居数量k的选取 Classification is more-or-less just a matter of figuring out to what available group so ...

  5. [更新ing]sklearn(十六):Nearest Neighbors *

    Finding the Nearest Neighbors 1.NearestNeighbors #Unsupervised learner for implementing neighbor sea ...

  6. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

  7. K Nearest Neighbor 算法

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  8. K NEAREST NEIGHBOR 算法(knn)

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  9. 文献记录(part81)--Clustering-based k -nearest neighbor classification for large-scale data with ...

    学习笔记,仅供参考,有错必纠 文章目录 Clustering-based k -nearest neighbor classification for large-scale data with ne ...

最新文章

  1. tomcat 部署:直接访问域名访问项目
  2. 朱俊彦团队提出GAN压缩算法:计算量减少20倍,生成效果不变,GPU、CPU统统能加速...
  3. 关闭360浏览器广告(广告洁癖)
  4. 中国茶叶行业投资策略分析预测及发展发展规划咨询报告2022年版
  5. 如何处理Java注释
  6. WinServer2012 R2忘记密码的解决方案+远程连接另一种莫名其妙故障
  7. mysql实训报告_MySQL实验报告
  8. GBDT(Gradient Boosting Decision Tree)
  9. 【解决Windows】修改win10默认开机启动动画
  10. 手机浏览器一键跳转微信加好友的方法
  11. 电脑开热点手机搜不到连不上
  12. android studio 扣费白屏,详解一次Vue低版本安卓白屏问题的解决过程
  13. 复旦大学计算机科学与技术,复旦大学计算机科学技术学院
  14. 拆机详解2:比Macintosh还早?苹果Lisa拆解
  15. 干货 | 应用打包还是测试团队老大难问题?
  16. 贪心算法(Greedy Algorithms)
  17. 计算机非全日制有用吗,计算机在职研究生还会有用吗?
  18. 不出国门,能拿海外硕士学位的两种方式
  19. Android 系统开发做什么?
  20. VS/Qt C++ 入门项目飞机大战(内含全部源代码,素材,项目工程,项目祥解)可直接运行

热门文章

  1. 阿里云无法 git clone 的解决
  2. 中国最美的一千个汉字 : 千字文5
  3. java pacs上传服务_医疗pacs系统影像数据的同步方法及前置服务器的制造方法
  4. iOS 直播 IJKPlayer
  5. 代码质量有哪些评判标准?
  6. 幂等矩阵(Idempotent matrix)
  7. “钢铁直猿”专属,5·20硬核表白方式三连击
  8. vue有纵向和横向表头表格
  9. ARIMA KeyError: ‘only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`)
  10. 更改web.config,让godady的win主机启用gzip压缩