各种大佬说,想要在开发走得远,必须学好数学。好比如,数学类似内功心法,编程技能是招数,你苦练招数,只是增加熟练度,到了后面想要打败更强大的敌人,单凭招数熟练度是啃不动的了,所以这个必须拥有强大的内功心法,让招数发挥更强大的威力才得以击败他。
这次,总结一下自己近段时间学习数学的知识和例子,并且为自己解惑一下,书评网站如何利用用户不相关性,推荐书给你,以达到自己内功和招数的融合。
向量
向量是一个有方向和大小,且满足平行四边形法则的几何对象。比如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i91P7lGJ-1633676799336)(sN2w8S.png)]
- 方向:箭头表示的方向,比如你汽车行驶的方向
- 大小:(m,n)长度,比如你汽车行驶方向时的速度
余弦距离
首先得先了解一下余弦距离,从几何上看,两个向量夹角几乎为0时,非常相似;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lHk0HZdG-1633676799339)(rgG39I.png)]
当然夹角为0的时候,两者关系最为紧密,此时余弦值为1。而相互垂直时,余弦值为0,相关性最差,或称相互独立:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m22ZH5fz-1633676799341)(rgJnx0.gif)]
也就是说,从上面可以得出:
1.两根向量夹角越小,相关性越强
2.两根向量垂直,彼此之间就没有关系,相互独立
3.两根向量夹角为180°的时候,则完全相反
利用余弦夹角挖掘用户相关性 – 某书评
正因为余弦距离解释了事物的相关性,所以有非常多的应用。比如在数据挖掘中,很多时候通过比较用户数据的余弦距离,以判断用户的相似性。
下面是某书评网站,用户对一些书籍进行了相应的评分:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-syLhf9oI-1633676799343)(rgtHK0.png)]
那么第一个用户信息可以用向量 u=(4,3,0,0,5,0) 来表示。
第二个的用户信息可以用向量 v=(5,0,4,0,4,0 ) 来表示。
则它们的相似性就可以用余弦距离来表示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pyN1y9UX-1633676799344)(rgUwpd.png)]
带入数据,结果保留到小数点后两位:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofmmuWgg-1633676799345)(rgULh4.png)]
以此类推,我们就可以做出如下表格,表明各个用户的相似性:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-brmb9AO9-1633676799346)(rgdmRJ.png)]
但是这有一个问题,比如第一个用户喜好假如是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IrCG0LP6-1633676799347)(rgdtRH.png)]
也就是说他对所有的书评分都为1。
而第二个用户的喜好是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4BkgcQfv-1633676799347)(rgdDdf.png)]
也就是说他对所有的书评分都为5。
按照我们的直觉,这两个人喜好是很不相同,但是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-heikPiRR-1633676799348)(rgdfLq.png)]
余弦距离居然表明两者的喜好是相同的。
我们来改进一下:
- 5分,表示很喜欢,实际值为2
- 4分,表示喜欢,实际值为1
- 3分,表示中性态度,实际值为0
- 2分,表示讨厌,实际值为-1
- 1分,表示很讨厌,实际值为-2
- 不打分,默认实际值为0
因此,第一个用户喜好的实际值为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u0i78fT3-1633676799349)(rg0GgH.png)]
而第二个用户喜好的实际值为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RQY0a8Wo-1633676799349)(rg0h5T.png)]
结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQtrR9f8-1633676799350)(rg0jIK.png)]
-1表示两人的爱恨是相反的。
反过来利用不相关性
-1,也就是相反的爱恨不代表不相关,我们可以这么来看,比如我们知道第一个用户和第二个用户的余弦距离为-1,那么第一个用户喜欢的就不要推荐给第二个用户,第一个用户讨厌的可以推荐给第二个用户,所以实际两人是相关的,而且还非常相关。
有句话怎么说来着:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJ0bgNjN-1633676799350)(rgDAX9.jpg)]
总结
有人可能会问,实际上开发中了解这个有什么用。其实如果你工作上真正遇到需要开发类似这种推荐系统的时候,如果你了解这个原理,你就有了方向。有了方向,你可以仿照上面书评的例子,根据自己的业务需求,更改其中的变量,或者增加一些其它参数变量以便更接近你需要的效果。
呐,这不是万变不离其宗的意思么?