05.10 如何通过奇异值分解来提高推荐系统的效果

这篇文章介绍的主要内容有:

1、使用基于项目的协同过滤构建一个简单的推荐系统

2、利用SVD来提高推荐系统的效率

3、推荐系统面临的挑战

在上一篇文章中已经介绍过了基于用户、基于项目的协同过滤以及基于内容的过滤。基于用户的协同过滤,用户相似度的计算会随着用户的增加而增加。

如何通过奇异值分解来提高推荐系统的效果

一、基于物品的协同过滤

如何通过奇异值分解来提高推荐系统的效果

上面是11个用户对于10部电影的评价,我们通过其他用户对电影的评价,来预测用户没有看过的电影(评价为0)。实现的效果是,输入用户的编号(下标),输出用户排名前3最有可能喜欢的电影(用户没有评价过的电影),以及预测的评分,电影相似度的计算采用余弦相似度。整个程序由两部分组成,第一部分是根据用户的下标和电影的下标,返回预测用户对电影的评分。第二部分输出用户评价最高的三部电影和评分。

如何通过奇异值分解来提高推荐系统的效果

如何通过奇异值分解来提高推荐系统的效果

通过传入电影数据和电影名称列表以及用户的下标,就可以预测用户评分最高的电影是哪些。通过上面的电影数据集可以发现,电影数据矩阵中存在很多的0,其实这也符合实际情况,如果数据更多,矩阵中的0可能会更多。通过SVD来提高推荐的效果。

二、使用SVD提高推荐效果

如何通过奇异值分解来提高推荐系统的效果

如何通过奇异值分解来提高推荐系统的效果

通过对比发现,基于SVD获取的评分电影和之前的电影评分略有不同。如果想要比较预测评分的MAE值,可以试着对已知评分进行预测,对比两个预测评分的MAE值进行评价。先对于没有使用SVD的协同过滤推荐系统而言,我们只是更改了预测电影评分中的电影之间的相似度的计算。在使用SVD的电影推荐系统中,先对电影数据进行SVD分解,然后通过根据特征值的平方,取前5个包含整个矩阵能量90%的特征值(矩阵的能量为累加特征值的平方和),通过左奇异矩阵和前5个特征值所构成的对角矩阵,将原始的电影评分矩阵11×10压缩为10×5,来减少数据中的噪声,提高推荐效率。

三、推荐系统面临的挑战

1、如何来提高推荐系统的运行速度?

在上面的电影推荐系统中,每次运行推荐程序的时候,都需要做SVD分解。从上面的数据来看,做SVD分解的时候,感觉不出什么。如果,对于大型数据的做SVD分解的时候,会降低程序的速度。而且,每次进行推荐的时候都需要计算物品之间的相似度。我们可以将第一次通过的SVD分解,计算出物品之间的相似度时,将结果进行保存。如果需要再次使用相似度的时候,只需要调用第一次保存的相似度即可。间隔一定时间,需要重新计算相似度来更新保存的相似度。

2、当数据不够时,如何来保证推荐系统的正常运行?

在使用协同过滤算法设计推荐系统的时候,是需要基于大量的数据,如果数据不够多的时候可能会导致系统不能够正常的运行,这个问题也被称之为冷启动(cold-start)。对于冷启动问题,我们可以使用基于内容的推荐,当数据达到一定量的时候,在使用协同过滤进行推荐。


分享到:


相關文章: