- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找出是否可以使用 Apache Spark 中的 MLlib 对数据进行“增量训练”。
我的平台是 Prediction IO,它基本上是 Spark (MLlib)、HBase、ElasticSearch 和其他一些 Restful 部分的包装器。
在我的应用程序中,数据“事件”是实时插入的,但为了获得更新的预测结果,我需要“pio train”和“pio deploy”。这需要一些时间,并且服务器在重新部署期间会离线。
我试图弄清楚是否可以在“预测”阶段进行增量训练,但找不到答案。
最佳答案
我想您正在使用 Spark MLlib 的 ALS 模型来执行矩阵分解。模型的结果是两个矩阵:用户特征矩阵和项目特征矩阵。
假设我们将接收带有隐式评级或交易的数据流,该模型的真正(100%)在线更新将是通过触发完整的更新来更新每个新评级信息的两个矩阵。再次在整个数据上重新训练 ALS 模型+新的评级。在这种情况下,运行整个 ALS 模型的计算成本很高,而且传入的数据流可能很频繁,因此会过于频繁地触发完全重新训练。
因此,知道这一点后,我们可以寻找替代方案,单一评级不应改变矩阵太多,而且我们有增量优化方法,例如 SGD。有一个有趣的(仍然是实验性的)库为 Explicit Ratings 的情况编写,它为 DStream 的每批进行增量更新:
https://github.com/brkyvz/streaming-matrix-factorization
使用诸如 SGD 之类的增量方法的想法遵循这样的想法:只要朝着梯度(最小化问题)移动,就可以保证朝着误差函数的最小值移动。因此,即使我们对单个新评级进行更新,仅更新该特定用户的用户特征矩阵,并且仅更新该特定项目评级的项目特征矩阵,并且更新是朝着梯度方向进行的,我们保证我们移动朝向最小值,当然是近似值,但仍然朝向最小值。
另一个问题来自 Spark 本身和分布式系统,理想情况下,对于每个新的传入评级,更新应该按顺序完成,但是 Spark 将传入流视为批处理,作为 RDD 分发,因此操作更新完成将针对整个批处理完成,不保证顺序。
更详细地说,例如,如果您使用 Prediction.IO,您可以使用内置的常规训练和部署功能进行离线训练,但如果您想要在线更新,则必须访问两个矩阵对于每批流,并使用 SGD 运行更新,然后要求部署新模型,此功能当然不在 Prediction.IO 中,您必须自己构建它。
有关 SGD 更新的有趣说明:
http://stanford.edu/~rezab/classes/cme323/S15/notes/lec14.pdf
关于apache-spark - ALS模型增量训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27734329/
我有一些未知的 C++ 代码是在发布版本中编译的,因此对其进行了优化。我正在努力解决的问题是: xor al, al add esp, 8 cmp byte ptr [ebp+
print_string: lodsb ; grab a byte from SI cmp al, 0 ;or al, al ; logical or AL by i
如何用 C 语言编写 test al,al 代码? 我试过 if((n & 0xFF) & 0){} 但这不正确。 谢谢。 最佳答案 我猜你接下来要检查零标志,即 jz 或类似的。在那种情况下你会想要
我在我的 Centos5 机器上运行了这个: ls -al & ; ls -al 我期待它在后台运行 ls -al,同时在前台运行 ls -al,并演示终端的输出是如何被破坏的通过这样做。 但是,我得
ArrayList al = new ArrayList(); 和有什么区别? ArrayList al = new ArrayList(0)? 最佳答案 ArrayList(0) 具有指定初始容量的
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: List versus ArrayList 之间的区别 ArrayList al = new ArrayLi
这是我的代码: section .data digit db 0,10 section .text global _start _start: call _printRAXD
我已经在 XCode 中创建了一个项目并添加了 OpenAL 框架。当我尝试包含 AL/al.h 时,编译器仍然找不到它。 我在哪里添加 OpenAL 的包含目录? 编辑:抱歉我忘了补充:我正在使用
问题陈述:需要从ymm0寄存器中提取位于其值在寄存器AL中的位置的字节。 我的方法:(相当难看): ; Set XMM1 to be a "shift one byte by righ
在调试使用信号量进行跨进程同步的应用程序时,我偶然发现了使用PowerShell代替“其他”进程的想法。在PowerShell中执行以下操作可以正常工作: // In C# application:
我正在尝试为用户显示电影推荐列表。模型已经过训练,但在尝试显示预测时出现错误。 als = ALS(maxIter=5, regParam=0.01, userCol="userID", itemCo
我们在 Azure Spark 上使用 ALS 来构建我们的推荐系统。 由于计算能力的原因,我们无法为每个用户输出不同的推荐列表。因此,我们将用户分为聚类,并使用 ALS 为每个单独的聚类质心输出推荐
我正在阅读一个反汇编的 win32 c++ 程序,我看到了很多: AND AL,0xFF 这是完全没有意义的还是为什么编译器会生成这些? 这是一个更长的例子: movsx eax, byte pt
我对用于推荐引擎的 ALS 有疑问? ALS 是确定性的吗?比如,如果你输入相同的数据和相同的参数,你是否应该总是得到相同的输出(或非常相似的结果)? 最佳答案 简短的回答应该是:NO。矩阵分解算法的
我正在使用 gtk 和 xlib(xtst) 创建一个程序来将假按键发送到应用程序,我创建了这个循环来将按键发送到事件窗口: Display *dis; dis = XOpenDisp
我正在尝试使用带有隐式反馈的 Spark MLib ALS 进行协作过滤。输入数据只有两个字段userId和productId。我没有产品评分,只有用户购买过哪些产品的信息,仅此而已。因此,为了训练
我正在做一个处理 x86 汇编语言的二进制炸弹实验室作业(我相信是 at&t)。我正在运行我的代码并走到最后,但最后我将我的 306 值与这个 %al 寄存器进行比较,我不知道如何获得它的值,因为我尝
有人可以指导我在linux中ls -ali输出的每一列描述什么吗? 最佳答案 ls -ali 类似这样的事情 67403780 -rw-------. 1 root root 1114 12月
我找到了一些声称使用 openAL 列出所有音频输出设备的示例,但是我只能让它们列出当前在 OSX(Yosemite、Maverick)上选择的设备。我使用的是 mac,有默认声卡(内置输出)以及 a
我想根据日期对“ls -al”命令的输出进行排序。我可以使用命令轻松地为一列执行此操作: $ ls -al | sort -k6 -M -r 但是如何同时对第 6 列和第 7 列执行此操作?命令: $
我是一名优秀的程序员,十分优秀!