热门标签 | 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




推荐阅读
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • importorg.apache.hadoop.hdfs.DistributedFileSystem;导入方法依赖的package包类privatevoidtestHSyncOpe ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 本文整理了Java中org.apache.hadoop.hbase.client.Increment.getDurability()方法的一些代码示例,展示了 ... [详细]
  • Hadoop 源码学习笔记(4)Hdfs 数据读写流程分析
    Hdfs的数据模型在对读写流程进行分析之前,我们需要先对Hdfs的数据模型有一个简单的认知。数据模型如上图所示,在NameNode中有一个唯一的FSDirectory类负责维护文件 ... [详细]
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社区 版权所有