参考: http://resources.codingthematrix.com/ 中的 "Lab: Comparing voting records using dot-product"
动画:manim community
假设现在收集了观众对电影的喜爱程度,怎么比较两个人的偏好相似程度呢?我们可以用向量点乘来解决这个问题。
| 让子弹飞 | 霸王别姬 | 喜剧之王 | 驴得水 |
|---|
A | 喜欢 | 喜欢 | 不喜欢 | 喜欢 |
B | 喜欢 | 无感 | 不喜欢 | 喜欢 |
C | 不喜欢 | 无感 | 喜欢 | 无感 |
D | 喜欢 | 不喜欢 | 无感 | 喜欢 |
首先,我们用表示喜欢,表示无感,表示不喜欢。
| 让子弹飞 | 霸王别姬 | 喜剧之王 | 驴得水 |
|---|
A | 1 | 1 | -1 | 1 |
B | 1 | 0 | -1 | 1 |
C | -1 | 0 | 1 | 0 |
D | 1 | -1 | 0 | 1 |
这样,在某一列中,
如果两人都喜欢某部电影(都为),则相乘后的值为,表示他们对这部电影的评价相同;
如果两人都不喜欢某部电影(都为),则相乘后的值也为,表示他们对这部电影的评价一致;
如果一人喜欢(),另一人不喜欢(),则相乘后的值为,表示他们对这部电影的评价相反;
如果其中一人无感(),则相乘后得,表示他们的偏好无关。
接着,我们对两行的值进行逐元素相乘并求和,就可得出两名观众对电影的偏好相似程度。
或者
例如,A和B的点乘为,
A和C的点乘为,
比较后可知,A和B对电影的偏好更为接近,A和C的偏好差异较大。