摘要:前两天刷视频平台找片,突然跳出个标着"未知类型"的电影。点开简介啥都没有,光知道评分7.8分。这时候才想起之前学过KNN算法可以预测分类,就试了试。其实这算法就是找最近的邻居,看邻居都是啥类型就跟着整,简单来说就是跟着"熟人"走。
前两天刷视频平台找片,突然跳出个标着"未知类型"的电影。点开简介啥都没有,光知道评分7.8分。这时候才想起之前学过KNN算法可以预测分类,就试了试。其实这算法就是找最近的邻居,看邻居都是啥类型就跟着整,简单来说就是跟着"熟人"走。
我把电影的各种特征列出来,比如时长、导演风格、主演名单这些。然后按距离公式算它和其他已知类型电影的距离。距离越近说明越像。举个例子,假设现在算到第9号电影,就得把它的各项数值跟所有其他电影比一遍。
但是问题来了,定k值多大会最准?如果选k等于5,那要看最近的五个电影是什么类型。要是k太大,好几部科幻片里夹个文艺片,那结论就不对了。反过来k太小更容易被局部影响,比如旁边两部喜剧片就乱套。
现在机器学习系统都在用这方法推荐。比如你总看爱情片,它就会找和你历史记录最近的其他用户,看你爱看的类型然后给你推送。不过有时候推荐特别奇怪,可能是因为k设得不合适,或者有的用户数据不够详细。
越多人参与反而可能出岔子。比如某部悬疑片被很多人标记过,周围邻居太多就会压倒其他类型。但冷门电影呢,附近没几个同类,反而容易被带偏。还有时候特征太多会导致计算量爆炸,像算一千部电影之间的距离就要花好多时间。
跟电商打过交道的人应该懂,淘宝推荐经常出错也是这个道理。他们后台可能也在调k值,或者改换计算方式。有次我买背包,系统突然给我推婴儿车,后来发现是因为当天很多人同时看了婴儿车和我的背包型号,算法就把这俩算邻居了。
真正好用的系统肯定做了很多优化。比如用树结构提前筛选邻居,不用每次都全算一遍。不过基础原理还是那个逻辑——看谁离得最近。现在明白为啥有些智能推荐特别准,有些特别坑了,都是k值和数据质量在捣乱。
最后说个怪事,用KNN给那部未知电影分类时,k=3算出来是奇幻片,k=5突然变悬疑。难怪有人说这算法不稳定,得根据情况反复试才行。总之就是靠着邻居家的数据瞎猜,有时候准,有时候也靠运气。
来源:电子小课堂一点号