热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mahout协同过滤算法源码分析(3-3)QR分解数据流

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_2564bit。接上篇分析完newQRDecomposition(Ai)后,此篇分析newQRDecompositio

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。

接上篇分析完new QRDecomposition(Ai)后,此篇分析new QRDecomposition(Ai).solve(Vi).viewColumn(0)的后面solve函数。

首先来明确几个变量:

Vi:

[[34.8125],[5.235105578655231],
[4.549926969654448]]
qr:

[[1.9817665337214256, -4.197854445325, -4.69114027734864],[0.12665092438034994, 1.9301220188705366, 0.3254138519486568],[0.14175336545641365, -0.36725063650346085, 2.0]]
rDiag:

{0:-32.26673724322168,1:-0.527836313803738,2:-0.29759508129758655}

然后就到了solve函数了:

getQ:    正交矩阵 (暂时没有分析)感觉好复杂的样子,分析了下就有点(ˇˍˇ) 想~吐了。。。

[[-0.9817665337214256, 0.06574179978609515, 0.17836055905244766],[-0.12665092438034994, -0.9259205856685633, -0.3558519529084921],[-0.14175336545641365, 0.3719530680019588, -0.9173641036064746]]
qt: getQ的转置

[[-0.9817665337214256, -0.12665092438034994, -0.14175336545641365],[0.06574179978609515, -0.9259205856685633, 0.3719530680019588],[0.17836055905244766, -0.3558519529084921, -0.9173641036064746]
y:矩阵qt和Vi的矩阵相乘:

[[-35.48574587647197],[-0.8662963228239493],[0.17231474217475284]]
r: getR,上三角矩阵

[[-32.26673724322168, -4.197854445325, -4.69114027734864],[0.0, -0.527836313803738, 0.3254138519486568],[0.0, 0.0, -0.29759508129758655]]
for循环:
      X[k,] = Y[k,] / R[k,k]
      Y[0:(k-1),] -= R[0:(k-1),k] * X[k,]
end
return x;

x:

[[1.0168655785532088],[1.2842501029087856],[-0.579024160693177]]
这样,x作为最终的输出返回到:

Vector uiOrmj = solver.solve(featureVectors, ratings, lambda, numFeatures);
然后就可以继续分析了。


大概总结下吧:原来算法是这么让人想吐的。。。还有就是我原本以为算法的话,可以不用怎么懂,只用分析源码,知道数据流是怎么走的就ok了,然后我一直也是按照这种思路来的,但是今天发现这种思路不行了,面对比较复杂的算法还是应该先了解算法的大概思路才行,比如上面最后一个的for循环,其实就是对矩阵的一些操作,如果用上面的那样来显示,我们人回很快理解,但是放到java的源代码里面感觉操作好复杂了。这个就是java对矩阵的支持不足吧。还有就是我的线性代数学的真的不怎么样。。。最后就是getQ函数木有分析。。。


分享,成长,快乐

转载请注明blog地址:http://blog.csdn.net/fansy1990




推荐阅读
  • 本文介绍了在解决Hive表中复杂数据结构平铺化问题后,如何通过创建视图来准确计算广告日志的曝光PV,特别是针对用户对应多个标签的情况。同时,详细探讨了UDF的使用方法及其在实际项目中的应用。 ... [详细]
  • 在Android应用开发中,当在MenuItem中通过app:actionLayout属性使用Switch控件时,可能会遇到空指针异常的问题。本文将探讨该问题的原因及解决方案。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文探讨了在使用Apache Flink向Kafka发送数据过程中遇到的事务频繁失败问题,并提供了详细的解决方案,包括必要的配置调整和最佳实践。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置单节点的Redis服务,包括下载、解压、编译安装以及启动服务的具体步骤。 ... [详细]
  • 【Java数据结构和算法】008栈
    目录0、警醒自己一、栈的应用场景和介绍1、栈的应用场景一个实际的场景:我的思考:2、栈的介绍入栈演示图:出栈演示图 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 深入理解云计算与大数据技术
    本文详细探讨了云计算与大数据技术的关键知识点,包括大数据处理平台、社会网络大数据、城市大数据、工业大数据、教育大数据、数据开放与共享的应用,以及搜索引擎与Web挖掘、推荐技术的研究及应用。文章还涵盖了云计算的基础概念、特点和服务类型分类。 ... [详细]
  • 计算机视觉初学者指南:如何顺利入门
    本文旨在为计算机视觉领域的初学者提供一套全面的入门指南,涵盖基础知识、技术工具、学习资源等方面,帮助读者快速掌握计算机视觉的核心概念和技术。 ... [详细]
  • 龙蜥社区开发者访谈:技术生涯的三次蜕变 | 第3期
    龙蜥社区的开发者们通过自己的实践和经验,推动着开源技术的发展。本期「龙蜥开发者说」聚焦于一位资深开发者的三次技术转型,分享他在龙蜥社区的成长故事。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
author-avatar
电信他爹_186
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有