mahout中基于hadoop的推荐系统采用抽样的方式压缩向量。
具体是这样的:
在相似度计算的job中,输入是这样的格式:
itemID , Vector< userID , pref >
首先通过对每个item的向量空间进行sampleDown采样,然后默认是500,不够五百的空间取全部向量。
然后就这样将推荐的向量压缩在了一个可控的范围,接下来对itemID进行相似度计算以后会有一个topN的排行,这个排行又一次剪枝了相似度矩阵,默认是100,也就是说,对于如下格式:
itemA , Vector< itemB , sim >
控制每个A对于物品B的最大控制在100以内。
什么意思呢,从最后开始倒着想,我们最后需要推荐10个itemB给用户,然后这10个是怎么得到的呢?
其实就是从用户的使用历史也就是itemA中通过每个itemA和itemB的相似度和用户对itemA的偏好的加权平均得到的。