• mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇


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

    额,好吧,心头的一块石头总算是放下了。关于Collaborative Filtering with ALS-WR这个算法中的那个QR分析,真心是太复杂了。以至于国庆后面三天基本都是在郁闷中过来的,想着自己的矩阵学的是有多差呀。。。后来算法验证弄懂之后才发觉,尼玛,java太坑爹了吧,矩阵求个逆,有那么复杂么!!!

    下面来开始验证:首先应该获得了两个变量分别是Ai和Vi,如果这两个变量不知道是啥东西,可以看参考:mahout算法源码分析之Collaborative Filtering with ALS-WR (三)QR分解数据流(1)。然后重点验证的是什么呢?就是matlab代码说这个Collaborative Filtering with ALS-WR算法是使用AiVi得到的,但是mahout中的源码中实现的太过于复杂了,我又不知道他是不是用的matlab一样的算法(官网说确实是参考这个算法的),所以采用的方式就是,我直接算一遍使用Ai的逆矩阵来和Vi乘积得到一个向量,然后使用mahout中的算法来跑一遍同样的数据,看两个结果是否一样。

    其中mahout中的算法已经跑出结果出来了,可以在前面几篇blog中看到,下面还是贴出来吧:

    Ai:

    [[31.678402777777777, 4.08661209859189, 4.573918596524476],
    [4.08661209859189, 1.0203966547288652, 0.3987296589988406],
    [4.573918596524476, 0.3987296589988406, 1.059026647737198]]

    Vi:

    [[34.8125],
    [5.235105578655231],
    [4.549926969654448]]

    然后mahout中求得最后的结果是:

    [[1.0168655785532088],
    [1.2842501029087856],
    [-0.579024160693177]]

    下面先求Ai的逆矩阵(这个可以在matlab中使用inv函数直接求得即可):

    0.1818   -0.4940   -0.5993
       -0.4940    2.4914    1.1958
       -0.5993    1.1958    3.0826

    然后使用这个逆矩阵和Vi相乘得到:

    结果一模一样的,有木有!!!

    分享,成长,快乐

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


  • 相关阅读:
    *Binary Tree Inorder Traversal
    First Unique Character in a String
    回溯法模板
    *Linked List Random Node
    *Odd Even Linked List
    *Maximum Product of Word Lengths
    Flatten 2D Vector
    Docker (dockerfile)
    Docker数据卷
    Docker入门
  • 原文地址:https://www.cnblogs.com/riskyer/p/3358027.html
Copyright © 2020-2023  润新知