一看到矩阵就会联想到大学时好像是线性代数课本里的东西,说起线性代数课,我觉得我是走了狗屎运,基本不听课,基本不看书,当然基本也不怎么上课。可是就那样的让我基本过了。 矩阵里面有各种各样的计算(有时间是可以去回顾回顾的),印象最深的还属数量积运算(也是最简单的计算),不知道的可以去翻翻课本。这里主要讲的是将矩阵计算运用到推荐系统中,研究研究矩阵计算是如何影响推荐系统的结果的。 举 个简单例子大家就很快明白矩阵计算在推荐系统中应用:例如你的推荐系统中有7个东西(item,标记为1,2,3,4,5,6,7)和一些人(在实际情况 中这些数据量是很大的),这些人中有对应的一些感兴趣的item,比如人1对item1,2感兴趣等。有了这些数据之后,我们就可以来构造一个矩阵了,矩 阵的行列都代表item,行列对应的值代表这两个item在这些人感兴趣的item中共同出现的次数。比如item1,2在人1中共同出现了,这时 item1,2对应的值就是1,如果还有其他人也同时对item1,2感兴趣,那么item1,2对应的值就变为2,以此类推。假设该矩阵结构如下:
其 中第二行的5代表item1和item1同时出现的次数,这个时候这个次数就是这些人中对item1感兴趣的人的数量。接下来的3代表的是item1,2 这这些人中同时出现的次数,其他一样。接下来我们要为其中一个用户3推荐item,用户3对这7个item感兴趣的分数依次为 2.0,0.0,0.0,4.0,4.5,0.0,5.0,其中0.0表示该用户对该item不感兴趣。绘制成矩阵如下:
这个时候将这两个矩阵进行数量积运算得到的结果为:
对于结果矩阵,我们需要将该用户已经该兴趣的item排除掉即item1,4,5,7,最后只剩下了item2,3,6,发现item3对应的结果值24.5是最高的,所以系统就可以判断该用户对item3可能也感兴趣,这时系统就可以将item3推荐给该用户了。 下 面我们来说说为什么出现次数能够作为推荐的一个判断条件:以上面的作为例子,因为item3和item1出现的次数需要和用户对item1的评分相乘,这 时候如果item3和item1共同出现的次数越高,用户对item1的评分越高,其计算结果值肯定也会越高,那共同出现的次数越高就表示这两个item 越相似(比如系统中共有10个用户,这10个用户都喜欢item1和item3,那是不是就可以推测item1和item3相似呢?),相似的item我 当然就可以推荐给用户。所以两个item共同出现的次数自然就可以作为推荐的一个条件。 该文的一个遗留问题就是 如何高效计算item之间的共同出现次数,如果使用单纯的想法去计算线上应用数据的话那么你的服务器就会单纯的挂掉。当然现在可以很容易的使用hadoop来处理这样的计算。