使用Mahout搭建推荐系统之入门篇3-Mahout源码初探
2019独角兽企业重金招聘Python工程师标准>>>
它们提供一下的比较重要的方法:getUserIDs: 获取所有用户的IDgetPreferencesFromUser: 获取某个用户对所有物品的评分.getItemIDsFromUser: 获取某个用户评论过的所有物品.getItemIDs: 获取所有物品的ID.getPreferencesForItem: 获取某个物品的所有评分.getPreferenceValue: 获取某个用户对某个物品的评分.getPreferenceTime: 获取某个用户对某个物品的评分时间.getNumItems: 获取所有的物品总数getNumUsers: 获取所有的用户综述.getNumUsersWithPreferenceFor 1 item 获取对某个item评论过的用户数目.getNumUsersWithPreferenceFor 2 items 获取对两个items同时评论过的用户数目.hasPreferenceValues: 判断是否有评分, 用于区分BooleanDataModel.getMaxPreference: 最大评分getMinPreference: 最小评分setPreference 改变某个用户对某个物品的评分, 并不改变数据源的数据.removePreference 去除某个用户对某个物品的评分, 并不改变数据源的数据.
private final long[] userIDs;
private final FastByIDMap<PreferenceArray> preferenceFromUsers;
private final long[] itemIDs;
private final FastByIDMap<PreferenceArray> preferenceForItems;
4.3 数据高效存储
高效的数据结构
下面介绍下Mahout节省内存的机制, 并介绍一些基本的内存消耗参数.
Preference不允许修改userID以及itemID, 如要删除部分数据, 只能通过修改value或者通过DataModel的removePreference方法来删除.
存储Preference最理想的内存开销是20bytes(long为8bytes, float为4bytes, 8*2 + 4 = 20bytes), 由于object overhead(包括一个reference指针8bytes(64位为16bytes), 以及16bytes的其它开销), 由于20+24=44bytes, 不为8的倍数, 还需要4bytes的padding开销. 所以为了存储20bytes的数据使用了多大48bytes的内存, 140%的冗余.
以PreferenceUserArray为例, 结构如下
此外FastIDSets和FastMap使用线性查找而不是链式查找, 可以节约空间且避免使用Entry Object. 同时FastIDSet避免使用Map. 待深入了解.
总结: FastIDSet平均为每个成员消耗14bytes, FastByIDMap为每个entry消耗28bytes. GenericDataModel为每个Preference消耗28bytes. [后面会使用System.gc(), Runtime.totalMemory()和Runtime.freeMemory()方法来进行内存消耗的测试]
此外: 系统需要保存一个相似矩阵, 相似矩阵或者Slope-One相似矩阵的空间复杂度上限为O(itemsNum**2) 或者O(usersNum**2).
4.4 更新数据
转载于:https://my.oschina.net/Cfreedom/blog/201829
使用Mahout搭建推荐系统之入门篇3-Mahout源码初探相关推荐
- 使用Mahout搭建推荐系统之入门篇-Mahout实战
原始地址:http://my.oschina.net/Cfreedom/blog/201828 用意: 结合上篇博客,写写代码熟悉一下Mahout.很多地方想法都比较粗糙,亟待指正. 代码放在了: ...
- arcgis开发 多版本之间如何兼容_arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)...
你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...
- vscode中安装webpack_leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址w ...
- 微信公众平台开发教程(四) 实例入门:机器人(附源码)
微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在 ...
- 视频教程-经典Vue从入门到案例到源码分析教程(含资料)-Vue
经典Vue从入门到案例到源码分析教程(含资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业 ...
- java中batch基础_详解Spring batch 入门学习教程(附源码)
详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...
- 梦幻诛仙linux纯端架设教程,梦幻诛仙 一键端搭建iOS安卓双端+完整后台源码+各种工具附带视频架设教程...
游戏说明: 梦幻诛仙一键端搭建iOS安卓双端+完整后台源码+各种工具,视频架设教程 在游戏内当前聊天窗口输入 dmmhzxnb ,开启后台. 提示GM后台已开启. 在左上角Press Enter ...
- 美团饿了么外卖返利小程序公众号搭建外卖返利分销系统代cps源码
美团饿了么外卖返利小程序公众号搭建外卖返利分销系统代cps源码 外卖CPS小程序源码分享 饿了么.美团优惠开发(外卖cps,三级裂变源码) 源码或搭建 http://y.mybei.cn/ 截图 功能 ...
- 用机器学习进行学生成绩预测的数据分析(入门向 附可用源码)
用机器学习进行学生成绩预测的数据分析(入门向 附可用源码) 声明 思路 检查数据 图像化处理 分析 相关性分析 构建模型 代码实现 可运行代码 声明 文章代码修改于kaggle博主DIPAMVASAN ...
最新文章
- Hadoop集群搭建(六:HBase的安装配置)
- 教你用Python爬取图虫网
- PHP 使用 Memcached
- Filesystem has errors解决办法
- 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)
- Android开发之旅:HelloWorld项目的目录结构
- XI 安装MS SQLSERVER JDBC 驱动
- 乔安监控云存储能存多长时间_干货 | 监控磁盘阵列知识介绍,不了解还不来看看?...
- vim中自动添加文件的作者、时间信息、版本等
- PyChram使用技巧
- java多个文件压缩_java实现多个文件压缩
- ipq6010 qsdk spf11.5 64bit编译
- 安卓版teamview15.5.3
- R语言查找指定值的位置(行列)1
- android 计时器工具类,Android实现计时器功能
- LCD驱动(FrameBuffer)实例开发讲解
- linux 笔记本双显示器,Ubuntu设置笔记本电脑双显示器(linux)
- 无人值守系统安装--自己的系统实用篇
- 如何从美国data.gov网站上下载气象数据(数据来源NOAA)
- 机器学习之梯度提升决策树(GBDT)
热门文章
- @Profile 根据不同环境注入bean
- babel从入门到入门
- Random:产生随机数的类
- java不同的数据源如何处理_java – 如何在不同的数据源上创建两个类之间的关系?...
- 这么详细的Python matplotlib底层原理浅析
- matlab函数isempty_matlab基本函数inf, isempty, round, floor, fix
- linux文件自动删除,自动删除文件脚本(Linux shell脚本)
- Web 服务器-Apache详解
- verdi显示状态机名字_如何写好状态机(三)
- mdk编译后的HTML,[转载]keil MDK编译完成后,Program Size: