一、协同过滤
推荐系统比较简单的做法就是:要为一个人推荐他可能感兴趣的东西,通常在一群人中找到与他“相似”(比如年龄相差不大,地域相差不远,专业也相近等等)的人,然后推荐这个人没有接触到, 而与他相似的人喜欢的东西给他。
同样一些非数值的东西需要量化,比如是否喜欢篮球量化为0和1等等。
经过量化后,就得到一个向量的集合,每一个向量代表一个人,或者一个物
1、使用欧氏距离。比如是n维的向量,那么两个向量的距离就是n维空间中两个点的距离
2、使用皮尔逊相似度, 判断一组数据的线性相关性
其实就是相似度 cov(x,y)/ (根号下D(X)*D(Y))
可以使用下面的公式逼近
比如向量为一个人对书的评价(book1,book2,book3)p代表person,代表一个人对三本书的评价矩阵
book1 book2 book3
p1 = (1, 3, 2)
p2 = (5, 1, 2)
p3 = (1, 3, 1)
把待推荐人与每一个其他人的相似性算出来,取相似性最大的几个进行推荐
把待推荐人与每一个其他人的相似性算出来,取相似性最大的几个
找出这些人看过,带推荐人没看过的东西。
计算每一个带推荐物品的加权分数,取加权分数最大的推荐给他。
例如
为andy推荐书
person andy与其他人相似度 book1分数
book2分数
book3分数
p1 0.8 5 3 1
p2 0.6 3 3 3
p3 0.3 5 2 4
物与物的相似性跟人与人的相似性是一样的。只需要将
评价矩阵
做一个
转置变化
book1 book2 book3
p1 = (1, 3, 2)
p2 = (5, 1, 2)
p3 = (1, 3, 1)
p1 p2 p3 (person)
book1
=(1, 5, 1)
book2
=(3, 1, 3)
book3
= (2, 2, 1)
比如人与人的相似性,得来的根据是 两个人对同一个 书的集合的评价分数来决定的。而这个书的集合是固定的,每一个对这个集合中的每一本书都打分。集合固定,那么这个集合的“特性”就是固定的,这里的“特性”很抽象,打个比方随机在地球的一个地方找到100个人,例如在成都找了100个人,这100个人的集合就有他的特有的不变的特性------打麻将,喝茶,吃辣子鸡等等。一个固定的书的集合也是一样的,有它的特性,而且是不变的。这个不变的特性就是一个衡量人与人相似性的标准(变化的就不行了,就成了多重标准了)。
反之,书与书的相似,是以一群固定的人的“特性”决定的。可以看把人对物打的分数,看做是这本书满足人的程度。
哎,太绕了。
二、量化
三、怎么判断两个人(物)比较接近

4、推荐过程
欧几里得距离与相关系数 的出发点(或者说角度)是完全不同的。
1>使用欧几里得距离是从每一个人的角度出发。把p1,p2看做一个n维空间。
2>使用相关系数,从商品的角度出发,把商品看做是一个随机变量M,例如p1分数为M=x,p2的分数是M=y,每一个人的一个分数看做的M的抽样。
这样就可以得到n个在二位坐标轴上的点(x,y)
如果相关系数接近1,x,y的线性相关性好,可以近似表示为y = ax+b,
5、为人推荐人
6、为人推荐物
例如book1的加权分数为 (0.8*5+0.6*3+0.3*5 )/(0.8+0.6+0.3)
同理计算book3,book2的加权分数。其实很好理解,相似度大的更有话语权,占的比例大。比如andy跟xiaolan相似度大他们打同样的分的几率就大,反之亦然。所以p1占的比重较大,p3占的比重小。
7、为物推荐物
得到
计算欧式距离或者相关系数
为什么这个相似性是合理和可行的呢?