1。介绍了主要影响item-based的性能的两个方面。
(1)item之间的相似度计算的
将用户作为每个item的维度,用cosine计算相似度。
利用条件概率(conditional probability)来计算相似度,这样能偶区分有不同历史记录的用户以及,频繁和非频繁的被购买的item。
计算购买了item i后的用户后续购买item j的概率。公式如下
其中Freq(i)是在整个集合中购买过i的用户的次数,Freq(ij )是集合中同时购买item i和j的用户数量。从上面的公式可以看出,最终的相似度矩阵式一个非对称矩阵。如果Freq(i)比较少,则购买次数比较多的item j将又有更高的条件概率。因此,对公式进行了如下修正:
取值0~1。当 =1的时候,整个相似度矩阵是一个对称矩阵。
上述公式没有区分不同用户购买的item不同的情况,继续对公式进行修正:
首先对每个user购买的记录进行归一化,与公式2采取item i,item j共现的方式不同,分子变成 ,表示第j列item的归一化后的权重的和。
进行推荐的代码如下:
输入为item的相似度作为模型M,item*item,当前user,为item*1,推荐个数N。算法首先根据相似度矩阵和用户向量相乘得出一个大小为item*1的向量x,在x中,用户没有购买过的item的值也是非0的了。所以,第一个for循环将x中用户已经购买的item的权重设为0,第二个for循环选择top N个item进行推荐。
该算法有一定的缺陷,当item与相邻的item的购买频率不是特别高的时候,比如都被购买了1次,那么这两个之间的相似度会很大的,造成推荐的失败。解决办法简单,相似度矩阵M在输入之前先进行归一化,然后再进行推荐。
(2)如何组织item来对item进行推荐。
将item-based的推荐扩展到高阶模型,对用户进行推荐的时候,首先决定于用户相似的item集合,然后根据选出的item集合进行推荐。
上述方法在计算两个item之间的相似度的时候,没有考虑一个用户购买的其他的item,并且在两个item的联合分布(joint distribution)与每个item的分布不一致的时候,不能找到最优推荐。
新方法在构建模型的时候,不仅仅计算K个最相近的item,也计算l个最相近的item集合。推荐的时候,不仅仅合并K个最近邻居的item,也合并l个item集合。
在相似度计算的时候分别计算 ,每个矩阵的维度分别是m*m,m*m**2(**相当于平方),具体算法如下,看的不是很懂,
核心是 ,放到程序中得出1,2,2,3,3,3,4,4,4,4,5,5,5,5,5的序列,不知道用意何在?
后续的推荐算法如下:
不明白的地方还是上面的地方。在此记录下,待后续在解答。