我们的一个爱好项目是名字推荐系统NamesILike.com, 这已经不是什么秘密了。在问了20个问题以找出他们的口味之后, 该网站向用户推荐了名字。将来的父母通常会使用它来为预期的孩子取一个名字。
像这样的推荐系统在数据科学领域很热门!著名的例子是Spotify, Netflix, Pandora, Last.fm和YouTube的推荐系统。
推荐系统的挑战之一是尽可能快地了解用户的口味。用户上网时的关注时间通常较短, 希望很快看到结果。我们决定通过询问20个多项选择问题来了解用户的口味。每个问题列出4个名称, 用户可以从中指出自己喜欢的名称(无需过多考虑)。下面的屏幕快照提供了一个示例:
文章图片
2017年12月, 由于病毒的传播, 我喜欢的名字吸引了大约40.000名访客。所有这些用户的点击都生成了一个不错的数据集, 因为我们跟踪向每个用户呈现的一系列问题以及选择的选项。
经过一些数据处理后, 我们可以构造一个用户反馈表, 其中” q” 列为问题编号, ” f” 列为反馈, ” n” 列为名称。反馈是” c” 代表未点击, 或者是” nc” 代表未点击。我们将此表称为用户反馈表。
下表显示了随机用户的用户反馈表的前10行:
F | ? | q | |
---|---|---|---|
0 | nc | Lia | 1 |
1 | C | Bo | 1 |
2 | nc | 海伦 | 1 |
3 | nc | Zehra | 1 |
4 | nc | Lou | 2 |
5 | nc | 中学 | 2 |
6 | nc | 劳伦斯 | 2 |
7 | C | 安妮莉丝 | 2 |
8 | nc | 六月 | 3 |
9 | C | 生活 | 3 |
我们对名称为3的名称的单击进行编码, 对值-1的非单击进行编码, 这样一来, 一个用户的反馈总和为零。
下表显示了用户项目矩阵的一部分。
名称 | 阿米莉亚 | 克拉拉 | 爱丽丝 | 艾玛 | 礼来公司 | 林德 | 中学 | Lou |
---|---|---|---|---|---|---|---|---|
用户身份 | ||||||||
0044dDn5Mh1V0O9Pwa8c | 3.0 | -1.0 | -1.0 | NaN | -1.0 | -1.0 | -1.0 | NaN |
00JcVTsDJ6wqJp4ymt40 | NaN | -1.0 | NaN | 3.0 | -1.0 | NaN | 3.0 | 3.0 |
00XJDcHhXwgAs64zRsZE | -1.0 | -1.0 | NaN | NaN | 3.0 | -1.0 | 3.0 | NaN |
010BLu21DwkpbZSVppZp | -1.0 | -1.0 | -1.0 | -1.0 | 3.0 | NaN | 3.0 | 3.0 |
01HiqB25APOJYRNgoEod | NaN | -1.0 | -1.0 | NaN | -1.0 | 3.0 | -1.0 | -1.0 |
01Ib76OTt49y3wUH0feO | NaN | NaN | -1.0 | -1.0 | NaN | NaN | NaN | 3.0 |
01MGzUmLfh4opU5FC6xd | 3.0 | -1.0 | NaN | -1.0 | NaN | -1.0 | NaN | -1.0 |
01hL2EYynEQA9CQBckSM | 3.0 | NaN | 3.0 | -1.0 | -1.0 | -1.0 | NaN | NaN |
0294V1C2QYgQ35tFkJkF | -1.0 | NaN | 3.0 | -1.0 | -1.0 | -1.0 | -1.0 | NaN |
02jmn1zx5aJ3oJBdx1Qb | -1.0 | NaN | 3.0 | NaN | NaN | NaN | 3.0 | 3.0 |
有很多方法可以完成此矩阵, 但是我们在这里集中在用潜在因子模型完成矩阵上。对于此博客文章, 解释这种方法的细节太过分了, 但是我们建议你观看此出色的Stanford教程。
简而言之, 潜在因子模型的目标是通过两个(较小)矩阵的乘积来估计用户项矩阵, 其中第一个矩阵具有与用户相同的行数, 并且许多列表示” 潜在特征” “ 。
第二个矩阵具有与项目相同的列数, 并且现在在行上编码了潜在特征。通过这种分解不可能对原始用户项矩阵进行完美估计, 但是我们尝试构建两个矩阵, 以使它们的乘积尽可能接近原始矩阵。然后, 它们的潜在特征对原始信息的分解, 紧凑表示进行编码。
文章图片
这些潜在特征(或隐藏特征)是什么?它们代表什么?
这是很难说的, 因为它们是通过优化过程选择的。
【使用矩阵分解查找相似的名称】回想一下, 以这样的方式构造潜在特征, 使得潜在特征矩阵的乘积尽可能接近完整矩阵。或者换句话说, 以这样的方式选择潜在特征, 使得从完整的用户项目矩阵到使用两个较小的潜在特征矩阵进行近似的信息损失尽可能小。下图显示了每个女性名字项目的前两个潜在特征的值:
文章图片
通过视觉检查此图, 我们确实观察到在新的潜在特征空间中” 相似” 的名称彼此靠近放置:
- 法语名称(例如(Camille, Alic, Amelie))的潜在功能2值较低;
- 佛兰德语的名字(Fien, Fenne, Nore, Janne)似乎具有较高的潜在特征2值和较高的潜在特征1值;
- 短名称(Lia, Liz, Lou)的潜在特征1值似乎较低, 而潜在特征2的值较高。
这些潜在的功能有助于我们做两件事:提高预测的准确性, 并为多项选择题设置抽样方案。有关更多信息, 请参见后面的博客文章。
推荐阅读
- 使用Matplotlib查看3D体积数据
- Python循环语句用法教程
- LDA2vec(主题模型中的单词嵌入)
- 学习数据科学-Python和R资源
- 学习数据科学-信息图
- Kaggle教程(EDA和机器学习)
- Google Cloud和数据科学(入门指南)
- CMD命令处理在Win7系统安全模式无法加载disk.sys的问题
- 深度技术win7 64位迅速装机版系统最新下载图文详细教程