RBM算法模型应用在推荐系统 Python代码实现
原文链接:http://blog.echen.me/2011/07/18/introduction-to-restricted-boltzmann-machines/
原作者代码地址:https://github.com/echen/restricted-boltzmann-machines
部分翻译:http://www.cnblogs.com/zhangchaoyang/articles/5537643.html
cnblogs上的这篇没有完全翻译,我主要翻译这篇没有提及但我需要用到的部分(就是指这篇译文中缺失的例子部分)。关于RBM概念介绍部分的翻译,请参考:http://www.cnblogs.com/zhangchaoyang/articles/5537643.html ===>这篇文章中有的本文将不再赘述
背景:假设你要求一群用户从0-100分来给一组电影打分。在经典的因子分析中,你可以尝试依据一组隐藏因子来解释每部电影及用户。例如,像星球大战和指环王这类电影与“科幻小说和魔幻”这类隐藏因子可能强相关,而喜欢瓦力和玩具总动员的用户与“皮克斯动画工作室”这一隐藏因子可能强相关。
RBM可以理解为一种二值化的因子分析法(这是对它的一种理解方式,当然还有其他的理解方式及用途,原文作者主要采用二值化因子分析法去解释并实现)。与以往让用户采用一个连续的分数段为电影打分不同的是,这里只是告诉你他们“喜欢”还是“不喜欢”一部电影(1或0),之后RBM将会尝试找到之所以这样去选择电影的隐藏因子。
例如,假设我们有一组共六部电影(哈利·波特、阿凡达、指环王3、角斗士、泰坦尼克号和星梦泪痕)并且让用户告诉我们他们想看哪些。如果我们想学到两个隐藏单元潜在的电影偏好---比如,在我们六部电影里呈现出了两个自然分组:“科幻小说/魔幻”组(包括哈利·波特、阿凡达和指环王3)以及“奥斯卡获得者”组(包括指环王、角斗士和泰坦尼克号),所以我们可能希望我们的隐藏单元将会与这些分组相对应---那么,RBM可能看起来像这样:
假设我们的两个隐藏单元确实与“科幻小说/魔幻”及“奥斯卡获得者”相对应。
- 如果Alice告诉我们她关于六部电影的二进制偏好值(可视层),我们就可以去问我们的RBM:与她偏好相对应的哪个隐藏单元会被激活(1或0)(如:要求RBM依据隐藏因子去解释她的偏好)。所以可视层的六部电影向隐藏单元发送消息,以更新隐藏层。(注意:即使Alice已经声称她想看哈利·波特、阿凡达和指环王3,也不能保证代表“科幻小说/魔幻”的隐藏层会被置1,但是只有那样才会有很大的可能性被置1。这也说得通:在现实世界中,因为Alice想看这三部电影通常使我们非常确信她喜欢“科幻小说/魔幻”类型的,但是,还是有可能因为其他原因使她做出这样的选择。因此,RBM允许我们在这个混乱真实的世界为人生成模型)
- 反过来,如果我们知道某人喜欢“科幻小说/魔幻”(此时“科幻小说/魔幻”隐藏单元被置1),我们便可以要求这个隐藏单元置1的电影单元RBM(比如,要求它生成一组电影推荐)。所以,隐藏单元向电影单元(可视层)发消息,告诉他们去更新他们的状态。(请再次注意,“科幻小说/魔幻”单元被置1不能保证我们总会推荐这三部电影:哈利·波特、阿凡达和指环王3。因为,你想想,并不是每个喜欢科幻小说的人都喜欢阿凡达)
按照原文作者给出的代码(https://github.com/echen/restricted-boltzmann-machines),让我们来演示一些例子。
首先,我使用一些造的数据来训练RBM:
- Alice: (Harry Potter = 1, Avatar = 1, LOTR 3 = 1, Gladiator = 0, Titanic = 0, Glitter = 0). Big SF/fantasy fan(科幻超级迷妹).
- Bob: (Harry Potter = 1, Avatar = 0, LOTR 3 = 1, Gladiator = 0, Titanic = 0, Glitter = 0). SF/fantasy fan, but doesn’t like Avatar(科幻迷,但不喜欢阿凡达).
- Carol: (Harry Potter = 1, Avatar = 1, LOTR 3 = 1, Gladiator = 0, Titanic = 0, Glitter = 0). Big SF/fantasy fan(科幻超级迷).
- David: (Harry Potter = 0, Avatar = 0, LOTR 3 = 1, Gladiator = 1, Titanic = 1, Glitter = 0). Big Oscar winners fan(奥斯卡超级迷).
- Eric: (Harry Potter = 0, Avatar = 0, LOTR 3 = 1, Gladiator = 1, Titanic = 0, Glitter = 0). Oscar winners fan, except for Titanic(奥斯卡迷,但不喜欢泰坦尼克号(译者注:原文此处Titanic = 1有误)).
- Fred: (Harry Potter = 0, Avatar = 0, LOTR 3 = 1, Gladiator = 1, Titanic = 1, Glitter = 0). Big Oscar winners fan(奥斯卡超级迷).
该网络学习到了以下权重:
请注意,第一个隐藏单元看起来对应“奥斯卡获得者”,第二个隐藏单元看起来对应“科幻小说/魔幻”,跟我们预期一致。
如果给RBM一个新的用户输入会发生什么呢?(可视层到隐藏层)比如George, 他的偏好是(Harry Potter = 0, Avatar = 0, LOTR 3 = 0, Gladiator = 1, Titanic = 1, Glitter = 0) ,结果是“奥斯卡获得者”对应的隐藏单元被置1(而不是“科幻小说/魔幻”),正确地猜出乔治可能更喜欢“奥斯卡获得者”类型的电影。
如果我们只激活“科幻小说/魔幻”对应的单元,并且让RBM训练一段时间会发生什么呢?(隐藏层到可视层)在我的试验中,有三次哈利·波特、阿凡达和指环王3被置1;有一次阿凡达和指环王3被置1,而哈利波特没有;有两次,哈利·波特和指环王3被置1,而阿凡达没有。注意,给予我们的训练集,这些生成的偏好的确匹配了我们觉得真正的科幻迷想要看的电影。
RBM算法模型应用在推荐系统 Python代码实现相关推荐
- 【负荷预测】基于灰色预测算法的负荷预测(Python代码实现)
目录 1 概述 2 流程图 3 入门算例 4 基于灰色预测算法的负荷预测(Python代码实现) 1 概述 "由于数据列的离散性,信息时区内将出现空集(不包含信息的定时区),因此只能按近似 ...
- 联邦学习算法介绍-FedAvg详细案例-Python代码获取
联邦学习算法介绍-FedAvg详细案例-Python代码获取 一.联邦学习系统框架 二.联邦平均算法(FedAvg) 三.联邦随梯度下降算法 (FedSGD) 四.差分隐私随联邦梯度下降算法 (DP- ...
- (信贷风控十一)随机森林在催收评分卡还款率模型的应用(python代码实现)
(十一)随机森林在催收评分卡还款率模型的应用(python代码实现) 催收评分卡和申请评分卡和行为评分卡不太一样,一般申请评分卡和行为评分卡使用一个模型就可以了,但是催收评分卡由三个模型构成:(不同的 ...
- pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现
递归形式 递归形式是算法中常用到的一种构造思路.递归允许函数或过程对自身进行调用,是对算法中重复过程的高度概括,从本质层面进行刻画,避免算法书写中过多的嵌套循环和分支语法.因此,是对算法结构很大的简化 ...
- 【强化学习】Sarsa算法求解悬崖行走问题 + Python代码实战
文章目录 一.Sarsa算法简介 1.1 更新公式 1.2 预测策略 1.3 详细资料 二.Python代码实战 2.1 运行前配置 2.2 主要代码 2.3 运行结果展示 2.4 关于可视化寻路过程 ...
- 用通俗易懂的方式讲解:决策树模型及案例(Python 代码)
文章目录 1 决策树模型简介 2 Gini系数(CART决策树) 3 信息熵.信息增益 4 决策树模型代码实现 4.1 分类决策树模型(DecisionTreeClassifier) 4.2 回归决策 ...
- 【强化学习】Q-Learning算法求解悬崖行走问题 + Python代码实战
文章目录 一.Q-Learning算法简介 1.1 更新公式 1.2 预测策略 1.3 详细资料 二.Python代码实战 2.1 运行前配置 2.2 主要代码 2.3 运行结果展示 2.4 关于可视 ...
- 麻雀优化算法 优化XGBoost的参数 python代码
文章目录 麻雀优化算法 麻雀优化算法的改进 加入Ten混沌序列 XGBoost原理 麻雀优化算法优化XGBoost 参数范围 部分代码 画图 优化结果 评价结果和运行时间 适应度曲线 训练集结果 测试 ...
- 机器学习模型常用性能指标和Python代码实现
文章目录 问题描述 性能指标 分类问题 回归问题 代码实现 分类问题 回归问题 代码测试 分类问题 回归问题 问题描述 上半年开始做一个需要机器学习算法模型的项目,但是之前并没有研发过这类模型.起初的 ...
- GCN-图卷积神经网络算法简单实现(含python代码)
本文是就实现GCN算法模型进行的代码介绍,上一篇文章是GCN算法的原理和模型介绍. 代码中用到的Cora数据集: 链接:https://pan.baidu.com/s/1SbqIOtysKqHKZ7C ...
最新文章
- c语言整形数组相加,[c语言]将两个整形升序数组合并为一个升序数组
- LSD-SLAM 编译过程(Ubuntu 14.04 + ROS Indigo
- c语言和java和汇编语言_C语言和汇编语言的区别是什么?
- 消息队列 策略_太狠了!京东T8架构师建议吃透这40W字消息队列文档,涨薪15K不是梦...
- 百度地图精确定位html,HTML5地理定位,百度地图API,知识点熟悉
- 使用JavaConfig的SpringMVC4 + Spring Data JPA + SpringSecurity配置
- php 当前linux用户权限,Linux 下用户组别权限的理解
- extjs 方法执行顺序_百战程序员:方法论
- 通配符?子字符串匹配主字符串次数_leetcode 44 通配符匹配(c++)
- 惊!程序员真的把地府后台管理系统做出来了!
- 如何解决PHP里大量数据循环时内存耗尽的问题
- Linux的常用网络命令
- 计算机网络-扩展路由器网段
- 正则匹配字符串无匹配不到_10. 正则表达式匹配
- 解决idea导入项目中文乱码intellij
- 时间搓转换剩余时间 php
- 如何利用MATLAB建立Lotka-Volterra模型及其改进模型
- Data too long for column ‘xxxx‘ at row 1 解决办法
- 引用antd 组件,样式丢失
- 信号积分变换的公式推导以及几个例子