ItemCF这个算法肯定很多人用过,这里我不谈在线优化ItemCF的问题,仅仅讨论离线的ItemCF算法。我这里谈到的这三个优化方法在我目前遇到的所有数据集上都是有效的,包括最近举行的KDD Cup。
ItemCF算法包含了两个部分:1)算出item的相似度矩阵 2)计算推荐结果
那么,三种优化方式就是
1. 在计算item相似度的时候,对于每一个用户,我们往往是将他看过的item两两加一。但是用户的活跃度不同,如果一个用户看了10000个电影,另一个只看了10部电影,那么看10000部电影的用户对他看的电影的相似度的贡献应该要小于看10部电影的。所以,每次应该不是将用户看过的item两两加一,而是加上一个 1 / log(3 + nu),nu是这个用户看过的电影的数目。
2. 对于算完的相似度,要做归一化。即如果w(i,j)是i,j的相似度,我们需要将w(i,j)做行归一化。
3. 最后的优化方法当然是选择邻域的数目,就是那个K。
除了这三个部分,itemcf能发掘的就不多了。
在认为发掘部分除了这三部分,其他挖掘点不过, 觉得不敢苟同。
其实在建模本身挖掘点还是很多的,比如:
建模本身 在建立关系矩阵的时候是否把用户观看电影的次数加进去,或者时长(针对看电影场景),比如在AppStore上用户玩过某款应用的次数和对改应用的兴趣度至少是正相关的。 或者建模本身不用关系矩阵,而是用欧几里德或者皮尔逊相关系数、余弦相似度?
计算w(i,j)的相似度对应公式的优化 对于w(i,j)=|N(i) 交 N(j)| / (|N(i)|^(1-a) *|N(j)|^a) 其中1-a本身是不一定合理的,我在没学习ItemCF之前是用的5-a ,其中a=4,效果远比1-a的任何a取值来的理想。 因为在选择1-a还是5-a的问题上,是对单个i相似度之间距离放大还是收敛,放大意味着希望TopN里包含的i的推荐j都有一定占比。(会有一种穿插排序的效果),而缩小则是相反。




Recent Comments