mahout源码分析之DistributedLanczosSolver(五)Job over
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。
1. Job 篇
接上篇,分析到EigenVerificationJob的run方法:
-217.2301704-50.91237571-56.33124551-437.0302763-2673.201255-17.4178515-22.39572264-10.55527624-18.2026063520.93983969-23.47156786-51.265212439897.17372看到和java计算的结果还是有点误差的,这个等下在后面补充下(主要是验证写个job1的仿制代码);newNorm就是resultantVector自己点乘然后开根号,值为:5479.061620543984,excel中的是:10263.9596402234。汗,这个值就很不一样了,看来的确是要验证下了;oldNorm就是vector的自乘然后开根号;然后就返回了。
这里就新建了rank个Job了,所以一共有5个Job,这样job都完了。
2.验证篇:
前面说怎么后面计算的误差值那么大?按理说也只是小数点后面的误差而已,通过前面编写的TimesSquareMapperFollow来进行debug(注意这里的设置的路径,在运行RunSVD的时候需要修改DistributedRowMatrix的276、277行,把其注释掉,这样就不会删除那个临时文件了),然后就可以进行测试了,首先来看第一条输出向量的d值:
额,感觉和前面的后面8位小数点后才不一样而已;然后是计算的是第一个值:
这里就是和excel不一样,咋回事呢?回去看源代码,才发现原来不需要再加上原始值的,如下:
这样就对了。
分享,成长,快乐转载请注明blog地址:http://blog.csdn.net/fansy1990