举例:电影推荐系统
张三 | 李四 | 王五 | 小明 | |
小时代 | 1 | 5 | ? | 5 |
精武英雄 | ? | 3 | 5 | 4 |
摔跤吧,爸爸 | 1 | 5 | ? | 5 |
死侍 | ? | ? | 5 | 4 |
表的第一行是用户列表,表中的数字表示用户对于电影评分,比如张三对于小时代的评分是1分,李四对于精武英雄的评分是3分,表中的问号表示用户没有对该电影评分,我们要做的就是预测用户对于没有评分的电影的评分会是多少分,对该用户的所有电影按照评分从高到低的顺序进行排列,最后将得分最高的那几个电影推荐给用户。下面就开始我们基于内容的推荐系统。
基于内容的推荐系统
让我们直观感受下基于内容的推荐系统的原理
张三 | 李四 | 王五 | 小明 | |
小时代 | 1 | 5 | ? | 5 |
精武英雄 | ? | 3 | 5 | 4 |
摔跤吧,爸爸 | 1 | 5 | ? | 5 |
死侍 | ? | ? | 5 | 4 |
爱情片 | 喜剧片 | 武侠片 |
0.9 | 0.1 | 0.0 |
0.2 | 0.1 | 1.0 |
0.1 | 0.5 | 0.1 |
0.3 | 0.9 | 0.1 |
还是之前的电影评分表,但这次还有一个关于电影内容矩阵X的表,这张表诠释了对于每部电影所包含的内容成分不一样的,现在我们要靠这两张表来求出另外一个矩阵,这个矩阵叫做用户喜好矩阵,这个矩阵中包含的是每个用户对于不同电影的喜好程度,最后我们根据用户喜好程度矩阵
乘以电影内容矩阵X,就会得到一个完整的电影评分表。这就是根据内容的电影评分表。
根据每部电影的内容以及用户已经评分的电影来推断每个用户对每个电影的喜好程度,从而预测每个用户对没有的电影的评分。
通俗来讲就是:根据电影的内容和用户已经评分的电影来判断没有看过的电影的评分。
现在来看看关于用户喜好矩阵的如何求解呢,下面是
的代价函数
u表示用户数量
r评分记录表
j指用户的数量 i指电影的内容
i用户对j电影的真实评分
是正则化项 ,n表示特征的数量。
但是存在的问题是:如何去计算一部电影中的各种成分(爱情片、武侠、动作.....)所占用的时间,这要让人为的去完成所以成本太大,
基于协同过滤的推荐系统的原理:
张三 | 李四 | 王五 | 小明 | |
小时代 | 1 | 5 | ? | 5 |
精武英雄 | ? | 3 | 5 | 4 |
摔跤吧,爸爸 | 1 | 5 | ? | 5 |
死侍 | ? | ? | 5 | 4 |
电影评分表
爱情片 | 2.2 | 5.0 | 4.5 | 1.0 |
喜剧片 | 1.0 | 2.5 | 1.1 | 2.2 |
武侠片 | 1.0 | 5.0 | 3.0 | 2.9 |
用户喜好矩阵
根据电影评分表和用户喜好矩阵来求出电影内容矩阵X,然后将电影内容矩阵和用户喜好矩阵
相乘就会得到完整的电影评分表。
是根据每个用户对于各种电影类型的喜好程度以及用户已经评分过得电影来推断每部电影的内容,从而预测每个用户对没有看过的电影的评分。
通俗来讲就是:根据电影类型的喜好程度以及用户已评分的电影来判断没有看过电影的评分。
下面是关于电影内容矩阵X的代价函数:
m表示电影数量
r评分记录表,我们会发现和用户喜好矩阵
基本一致
我们将两个矩阵相乘,就是协同过滤的代价函数
(相关的公式可以去项亮的《推荐系统实践》)
矩阵分解:
爱情 | 喜剧 | 武侠 |
0.1 | 0.5 | 0.1 |
0.2 | 0.1 | 1.0 |
0.9 | 0.1 | 0.0 |
0.3 | 0.9` | 0.1 |
爱情 | |||||
喜剧 | 1.0 | 1.0 | 3.5 | 4.0 | 2.0 |
武侠 | 3.0 | 3.5 | 5.0 | 4.5 | 5.0 |