1. 问题提出
对于与之前一样的数据集,我们很难得到一部电影偏向爱情片和动作片的程度,即很难得到表中 x1 和 x2 的值,而且一部电影的特征不止这两种,我们也需要更多的特征。
Movie |
Alice (1) |
Bob (2) |
Carol (3) |
Dave (4) |
x1 (romance) |
x2 (action) |
Love at last |
5 |
5 |
0 |
0 |
0.9 |
0 |
Romance forever |
5 |
? |
? |
0 |
1.0 |
0.01 |
Cute Puppies of love |
? |
4 |
0 |
? |
0.99 |
0 |
Nonstop car chases |
0 |
0 |
5 |
4 |
0.1 |
1.0 |
Swords vs. karate |
0 |
0 |
5 |
? |
0 |
0.9 |
怎样得到这些特征呢?
将问题稍微变化一下,假如我们有一个数据集,如下图,我们并不知道表中 x1 和 x2 的特征的值(x0=1)。
Movie |
Alice (1) |
Bob (2) |
Carol (3) |
Dave (4) |
x1 (romance) |
x2 (action) |
x(1) Love at last |
5 |
5 |
0 |
0 |
? |
? |
x(2) Romance forever |
5 |
? |
? |
0 |
? |
? |
x(3) Cute Puppies of love |
? |
4 |
0 |
? |
? |
? |
x(4) Nonstop car chases |
0 |
0 |
5 |
4 |
? |
? |
x(5) Swords vs. karate |
0 |
0 |
5 |
? |
? |
? |
但假设我们采访了每一位用户,并且每一位用户都告诉我们,他们喜欢爱情电影和动作电影的程度的程度。那么 Alice、Bob、Carol、Dave 都有了对应的参数 θ(1) , θ(2),θ(3),θ(4) 如下:
θ(1)=⎣⎡050⎦⎤,θ(2)=⎣⎡050⎦⎤,θ(3)=⎣⎡005⎦⎤,θ(4)=⎣⎡005⎦⎤
比如 Alice 的参数代表她特别喜欢爱情电影,但是一点都不喜欢动作电影。此时我们知道对于电影 x(1) ,Alice 和 Bob 打了5分,而且他们都喜欢爱情电影,不喜欢动作电影,Carol 和 Dave 给了 0 分,他们都喜欢动作电影,不喜欢爱情电影。那么我们就能猜到,这个电影可能是爱情电影,不太可能是动作片。所以 x1 可能等于 1, x2 可能等于 0 。
我们想要知道的是,x(1) 应该是多少,才使得 (θ(1))Tx(1)≈5 , (θ(2))Tx(1)≈5, (θ(3))Tx(1)≈0, (θ(4))Tx(1)≈0 ,很明显,x(1) 应该约等于 ⎣⎡11.00⎦⎤ 。
2. 公式化表达
给定 θ(1),…,θ(nu),学习特定电影的特征参数 x(i) ,目标函数为:
x(i)min21j:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(xk(i))2
可以发现这个公式和基于内容的推荐算法的公式很像,只是最小化改变的变量和正则化项不同。
给定 θ(1),…,θ(nu),学习所有的电影的特征参数 x(1),…,x(nm),目标函数为:
x(1),…,x(nm)min21i=1∑nmj:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2
3. 协同过滤
- 给定 x(1),…,x(nm),可以学习 θ(1),…,θ(nu) (见16-2 基于内容的推荐算法)
- 给定 θ(1),…,θ(nu),可以学习 x(1),…,x(nm)
这有些像先有鸡还是先有蛋的问题,如果我们随机的猜测一些 θ 的值,根据 θ 的值来计算 x 的值,再用 x 的值来计算 θ 的值……多次重复迭代之后,算法将收敛到一组合理的值。这是简单的协同过滤算法,在接下来的一节,我们将改进这个算法,使其在计算时更加高效。该问题只在每位用户都对数个电影进行了评价,并且每一部电影都被数位用户评价的情况下有效。