一, 引言
没有足够的关于结构化深度学习的出版物, 但它肯定出现在行业中:
结构化深度学习, 作者: Kerem Turgutlu @datascience.com
你可以使用此工具从 Google 下载图片并解决自己的问题:
小型图像数据集的乐趣 (第 2 部分), 作者: Nikhil B @datascience.com
如何训练神经网络的介绍 (一篇伟大的技术写作):
我们如何 "训练" 神经网络?, 由 Vitaly Bushaev @datascience.com
学生们在 Kaggle 幼苗分类比赛中与 Jeremy 竞争.
II. 协同过滤 - 使用 MovieLens 数据集
讨论的笔记本可以在这里找到 (lesson5-movielens.ipynb).
我们来看看数据. 我们将使用 userId (类别), movieId (类别) 和 rating(因变量) 进行建模.
- ratings = pd.read_csv(path+'ratings.csv')
- ratings.head()
image.PNG
为 Excel 创建子集
我们创建了最受欢迎的电影和大多数电影狂热粉的交叉表, 我们将其复制到 Excel 中进行可视化.
- g=ratings.groupby('userId')['rating'].count()
- topUsers=g.sort_values(ascending=False)[:15]
- g=ratings.groupby('movieId')['rating'].count()
- topMovies=g.sort_values(ascending=False)[:15]
- top_r = ratings.join(topUsers, rsuffix='_r', how='inner', on='userId')
- top_r = top_r.join(topMovies, rsuffix='_r', how='inner', on='movieId')
- pd.crosstab(top_r.userId, top_r.movieId, top_r.rating, aggfunc=np.sum)
image.PNG
这是包含上述信息的 Excel 文件. 首先, 我们将使用矩阵分解而不构建神经网络.
image.PNG
蓝色单元格 - 实际评级
紫色单元格 - 我们的预测
红色单元格 - 我们的损失函数即均方根误差 (RMSE)
绿色单元格 - 电影嵌入 (随机初始化)
橙色单元格 - 用户嵌入 (随机初始化)
每个预测是电影嵌入向量和用户嵌入向量的点积. 在线性代数术语中, 它等于矩阵乘积, 因为一个是行, 一个是列. 如果没有实际评级, 我们将预测设置为零 (将其视为测试数据 - 而不是训练数据).
image.PNG
然后我们使用梯度下降来减少损失. Microsoft Excel 在加载项中有一个 "求解器", 可以通过更改所选单元格来最小化变量 (GRG Nonlinear 是你要使用的方法).
这可称为 "浅学习"(与深度学习相反), 因为没有非线性层或第二线性层. 那么我们直觉上做了什么呢? 每部电影的五个数字称为 "嵌入"(潜在因式) - 第一个数字可能代表科幻和幻想的程度, 第二个数字可能是电影使用了多少特效, 第三个可能是对话驱动的程度. 与之类似, 每个用户还有 5 个数字, 例如, 表示用户喜欢幻想, 特效和对话驱动的电影的程度. 我们的预测是这些向量的叉乘. 由于我们没有每个用户的每个电影评论, 因此我们试图找出哪些电影与这部电影相似, 以及其他用户评价其他电影, 如何与这个用户评价这个电影类似 (因此称为 "协同").
我们如何处理新用户或新电影 - 我们是否需要重新训练模型? 我们现在没有时间来讨论这个问题, 但基本上你需要有一个新的用户模型或最初会使用的新电影模型, 随着时间的推移你需要重新训练模型.
来源: http://www.jianshu.com/p/be1e9607598c