本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 。
以下内容是个人的论文阅读笔记,内容可能有不到之处,欢迎交流

未经本人允许禁止转载

问题背景

最近,在使用Java实现一个个性化推荐算法时,遇到了非常常见的问题。实现的算法为:
Wang C, Blei D M. Collaborative topic modeling for recommending scientific articles[C]//Proceedings of the 17th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2011: 448-456.

该算法主要针对的是科研文章的推荐问题。

在算法的公式推理中,即:
)
其中,CiC_{i}Ci​为J∗JJ*JJ∗J的对角矩阵。对角矩阵上的值为:


由于我用的数据集包含16800左右的商品,即CiC_{i}Ci​的维度为16800*16800。在算法实现的过程中,我已对其他变量做了初始化。
在产生该对角阵时,我是用了下面的操作方式:

 public RealMatrix matrixCEachUser(int u){double[][] cUserNew = new double[M][M];for (int i = 0; i < rating[u].length; i++) {cUserNew[rating[u][i]][rating[u][i]] = 0.99;}for (int i = 0; i < M; i++) {if (cUserNew[i][i] < 0.5) {cUserNew[i][i] = 0.01;}}RealMatrix mat1 = new Array2DRowRealMatrix(cUserNew).transpose();return mat1;}

即如果rij=1r_{ij}=1rij​=1,则该对角上的值为0.99,否则为0.01。但在实际产生这个大对角阵时,却出现了内存溢出,即:

Java heap space

同时,调整VM也没有解决。

为此,需要寻找更好的解决方案。

解决方案

为了防止内存溢出,能够进行矩阵运算,我这里使用了math3中的DiagonalMatrix类。在使用时,我将二维数组变成了一维数组,之后直接产生对角阵。解决的程序如下面所示:

 //get matrix C_i: a diagonal matrixpublic RealMatrix matrixCEachUser(int u){double[] cUserNew = new double[M];for (int i = 0; i < rating[u].length; i++) {cUserNew[rating[u][i]] = 0.99;}for (int i = 0; i < M; i++) {if (cUserNew[i] < 0.5) {cUserNew[i] = 0.01;}}DiagonalMatrix matrix = new DiagonalMatrix(cUserNew);return matrix;}

Collaborative topic modeling(推荐)算法实现中的大数组问题相关推荐

  1. Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户、物品的协同过滤推荐算法 机器学习、分布式大数据、人工智能开发

    Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户.物品的协同过滤推荐算法 机器学习.分布式大数据.人工智能开发 ShopRec ...

  2. 在线音乐推荐网 Python+Django+Mysql开发技术 基于用户、物品的协同过滤推荐算法 个性化音乐推荐系统 音乐网站+协同过滤推荐算法 机器学习、分布式大数据、人工智能开发

    在线音乐推荐网 Python+Django+Mysql开发技术 基于用户.物品的协同过滤推荐算法 个性化音乐推荐系统 音乐网站+协同过滤推荐算法 机器学习.分布式大数据.人工智能开发 MusicRec ...

  3. 简单在线音乐推荐网 基于用户、物品的协同过滤推荐算法 使用Python+Django+Mysql开发技术 在线音乐推荐系统 音乐网站推荐系统 个性化推荐算法开发 人工智能、大数据分布式、机器学习开发

    简单在线音乐推荐网 基于用户.物品的协同过滤推荐算法 使用Python+Django+Mysql开发技术 在线音乐推荐系统 音乐网站推荐系统 个性化推荐算法开发 人工智能.大数据分布式.机器学习开发S ...

  4. 【推荐算法课程】CS246 大数据挖掘

    文章目录 一.课程介绍 二.作者介绍 三.具体章节 四.小结 一.课程介绍 重点~课程对应教材(pdf可下载):http://www.mmds.org/ CS246主题包括: 频繁项集和关联规则,高维 ...

  5. 有关堆栈溢出(in vs 2005)的读书笔记--堆栈中 申请大数组

    部分原创 66下一步 Vs 堆栈 理论修改的上限是多少 ? 问题2: 全局变量去 最大的上限是多少? 堆栈(休养版本测试) 2012年3月31日17:31:27 3月 从 10^5到 10^6数组,导 ...

  6. 深度学习在推荐算法上的应用进展

    作者:赵鑫,中国人民大学信息学院讲师,微博:赵鑫RUC. 原文:RUC智能情报站 | 深度学习在推荐算法上的应用进展 摘要:最近几年是深度学习发展的黄金时间,在多个领域取得了重要进展,包括图像领域.语 ...

  7. (一)推荐算法概述——以协同过滤为主

    推荐算法具有非常多的应用场景和商业价值,因此对推荐算法需要认真学习.推荐算法种类很多,但是目前应用最广泛的应该是基于协同过滤的推荐算法. 本文总结了多种推荐算法,其中重点对协同过滤的推荐算法做一个概括 ...

  8. 基于SVD++隐语义模型的信任网络推荐算法

    点击上方蓝字关注我们 基于SVD++隐语义模型的信任网络推荐算法 陈佩武1, 束方兴2 1 平安科技(深圳)有限公司,广东 深圳 518031 2 北京大学互联网研究院(深圳),广东 深圳 51805 ...

  9. 从原理到落地,七大维度读懂协同过滤推荐算法

    作者丨gongyouliu 来源 | 大数据与人工智能 导语:本文会从协同过滤思想简介.协同过滤算法原理介绍.离线协同过滤算法的工程实现.近实时协同过滤算法的工程实现.协同过滤算法应用场景.协同过滤算 ...

最新文章

  1. 自动驾驶中基于激光雷达的车辆道路和人行道实时检测(代码开源)
  2. MariaDB 宣布成立基金会
  3. php cms word导入,phpcms V9文章编辑器不能按word文档复制过来的段头缩进显示
  4. OS_CORE.C(3)
  5. Docker将镜像上传至私有仓库
  6. 你发这些什么目的_吸引女生冷知识:朋友圈发照片的“潜规则”,男生要懂
  7. HDU 5936 Difference
  8. Mathematica修改默认字体
  9. CTO职场解惑指南系列(一)
  10. (转)Spring Boot(十一):Spring Boot 中 MongoDB 的使用
  11. fibonacci数列前20项_数学第十七课:数列综合应用第一弹
  12. AttributeError: module ‘tensorflow.python.layers.base‘ has no attribute ‘Node‘
  13. 项目lib上传maven仓库配置
  14. istio sidecar流量接管_istio 常见的 10 个异常
  15. 人民网app搜索案例
  16. iptables中DNAT、SNAT和MASQUERADE的理解及限速syn
  17. pythonurllib新浪微博_定向爬虫 - Python模拟新浪微博登录
  18. 深度学习整理:detection 学习(2)——detection细节知识入门
  19. 淘宝运营的逻辑与本质是什么?
  20. [025] 微信公众帐号开发教程第1篇-引言

热门文章

  1. MySQL8.0内存相关参数介绍
  2. TypeScript入门教程 之 箭头函数
  3. 容器编排技术 -- Kubernetes kubectl delete 命令详解
  4. SpringBoot集成MongoDB
  5. 阿里巴巴集团的几十款著名开源项目(Java)
  6. ZooKeeper Internals -- ZooKeeper内部工作方式
  7. 行为设计模式 - 命令设计模式
  8. Solaris 中的环境变量
  9. Matlab适配器模式
  10. 亲测使用 swagger 动态修改后台默认访问地址 swagger-ui.html