笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归

1.KNN分类

假设有很多水果,我们通过颜色和个头可以区分它们是橙子还是柚子。
笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归_第1张图片
但现在有个水果位于两个区域中间,如何判断其实橙子还是柚子呢?
笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归_第2张图片
一种办法是看它的邻居。来看看离它最近的三个邻居。
笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归_第3张图片
在这三个邻居中,橙子比柚子多,因此这个水果很可能是橙子。
笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归_第4张图片

2.KNN聚类

假设你是Netflix,要为用户创建一个电影推荐系统。
下面是一种将用户转换为一组数字的方式。用户注册时,要求他们指出对各种电影的喜欢程度。这样,对于每位用户,都将获得一组数字!
笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归_第5张图片
假设你要向Priyanka推荐电影。
这里计算的是五维(而不是二维)空间中的距离,但计算公式不变。
笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归_第6张图片
可以算出Priyanka和Justin的距离为2,Priyanka和Morpheus的距离为根号24。上述距离表明,Priyanka的喜好更接近于Justin而不是Morpheus。太好了!现在要向Priyanka推荐电影将易如反掌:只要是Justin喜欢的电影,就将其推荐给Priyanka,反之亦然。你这就创建了一个电影推荐系统!
如果你是Netflix用户,Netflix将不断提醒你:多给电影评分吧,你评论的电影越多,给你的推荐就越准确。现在你明白了其中的原因:你评论的电影越多,Netflix就越能准确地判断出你与哪些用户类似。

3.KNN回归(预测数值)

假设你要预测Priyanka会给电影Pitch Perfect打多少分。为此,先找出与她最近的5个人。

笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归_第7张图片
Justin、JC、Joey、Lance和Chris都给它打了多少分呢?
笔记:《算法图解》第十章:K最近邻算法(KNN算法)——分类、回归_第8张图片
你求这些人打的分的平均值,结果为4.2。这就是回归(regression)。

特征抽取

特征抽取意味着将物品(如书中案例的水果或用户)转换为一系列可比较的数字。
在挑选合适的特征方面,没有放之四海皆准的法则,你必须考虑到各种需要考虑的因素。使用KNN时,挑选合适的特征进行比较至关重要。
所谓合适的特征,就是:
❑ 与要推荐的电影紧密相关的特征;
❑ 不偏不倚的特征(例如,如果只让用户给喜剧片打分,就无法判断他们是否喜欢动作片)。

余弦相似度

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

练习

10.1 在Netflix示例中,你使用距离公式计算两位用户的距离,但给电影打分时,每位用户的标准并不都相同。假设你有两位用户——Yogi和Pinky,他们欣赏电影的品味相同,但Yogi给喜欢的电影都打5分,而Pinky更挑剔,只给特别好的电影打5分。他们的品味一致,但根据距离算法,他们并非邻居。如何将这种评分方式的差异考虑进来呢?
10.2 假设Netflix指定了一组意见领袖。例如,Quentin Tarantino和Wes Anderson就是Netflix的意见领袖,因此他们的评分比普通用户更重要。请问你该如何修改推荐系统,使其偏重于意见领袖的评分呢?
10.3 Netflix的用户数以百万计,前面创建推荐系统时只考虑了5个最近的邻居,这是太多还是太少了呢?

答案

10.1 可使用归一化(normalization)。你可计算每位用户的平均评分,并据此来调整用户的评分。例如,你可能发现Pinky的平均评分为星3,而Yogi的平均评分为3.5星。因此,你稍微调高Pinky的评分,使其平均评分也为3.5星。这样就能基于同样的标准比较他们的评分了。
10.2 可在使用KNN时给意见领袖的评分更大权重。假设有3个邻居——Joe、Dave和意见领袖WesAnderson,他们给Caddyshack的评分分别为3星、4星和5星。可不计算这些评分的平均值(3+4+5) / 3=4星,而给Wes Anderson的评分更大权重:(3+4+5+5+5) /5=4.4星。
10.3 太少了。如果考虑的邻居太少,结果很可能存在偏差。一个不错的经验规则是:如果有N位用户,应考虑sqrt(N)个邻居。

你可能感兴趣的:(《算法图解》)