`
gushuizerotoone
  • 浏览: 175075 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

lanczos学习

阅读更多
1. 《matrix computation》P470: Equally important, information about A's extremal eigenvalues tends to emerge long before the tridiagonalization is complete. This makes the Lanczos algorithm particularly useful in situations where a few of A's largest or smallest eigenvalues are desired. 从一端算起,另一端的eigenvalues出现得就越慢,即是算eigenvalues/eigenvectors有一个order,从大到小,或从小到大。特别适用于那些只求大的eigenvalues或者只求小的eigenvalues。

2.https://issues.apache.org/jira/browse/MAHOUT-180 NOTE: Lanczos spits out desiredRank - 1 orthogonal vectors which are pretty close to being eigenvectors of the square of your matrix (ie they are right-singular vectors of the input corpus), but they span the spectrum: the first few are the ones with the highest singular values, the last few are the ones with the lowest singular values. If you really want, e.g. the highest 100 singular vectors, ask Lanczos for 300 as the rank, and then only keep the top 100, and this will give you 100 "of the largest" singular vectors, but no guarantee that you don't miss part of that top of the spectrum. For most cases, this isn't a worry, but you should keep it in mind. mahout lanczos只能从大到小求eigenvalue?

3.http://lucene.472066.n3.nabble.com/SVD-Memory-Reqs-td946350.html#a946350:Computing 1000 singular vectors is generally neither necessary nor helpful. Try scaling up the rank option from a small number first before blowing out
your memory requirements.
desirerank的定义:
desirerank:the number of non-zero singular values
内存消耗:
In general, the current SVD impl requires, on the driving machine (ie not on
the HDFS cluster), at least 2 * rank * numCols * 8bytes.  In your case, this
would be still a fairly modest value, like 62k * 16k = 1GB.

4.http://lucene.472066.n3.nabble.com/Generating-a-Document-Similarity-Matrix-td879322.html#a879322
产生similarity-matrix的程序实例:sparse很重要
//
  String inputPath = "/path/to/matrix/on/hdfs";
  String tmpPath = "/tmp/matrixmultiplyspace";
  int numDocuments = // whatever your numDocuments is
  int numTerms = // total number of terms in the matrix

  DistributedRowMatrix text = new DistributedRowMatrix(inputPath,
    tmpPath, numDocuments, numTerms);
  JobConf conf = new JobConf("similarity job");
  text.configure(conf);

  DistributedRowMatrix transpose = text.transpose();

  DistributedRowMatrix similarity = transpose.times(transpose);
  System.out.println("Similarity matrix lives: " + similarity.getRowPath());
//
它的例子是item是word
    item1  item2  item3  item4 ... itemn
Doc1
Doc2
Doc3
.
.
Docn
这样得到一个doc-word的similarityMatrix,对这个matrix求最大的singualrValue/singualVector,但是我们的是一个laplacianMatrix,求的是最小的sigualValue??

5.Text is extraordinarily sparse (high dimensional), and clustering the raw
text will not get you great results.  If you reduce the dimensionality, by
doing SVD on the text first, *then* doing kmeans on the reduced vectors,
you'll get better clusters.  Alternately, running LDA on the text can do
similar things.  How many job descriptions do you have in your Solr index?

6.lanczos svd不仅对大值的eigenvalue/eigenvector是一个很好的模拟,对值小的eigenvalue/eigenvector也是一个很好的模拟,比如如果desireRand=300,则前100是最大100个eigenValue/eigenVector很好的模拟,后一百则是最小100个eigenValue/eigenVector很好的模拟

7.lanczos得到的结果中可能排在最后或者倒数第几个 有一个eigenvalue/eigenvector不是最小set里的,它的值比较大,是0.9...把这个值要删除掉。

10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|90| = |0.005383385435541467|, err = 2.220446049250313E-16 to baseTmpDir/cleanOutput/largestCleanEigens
10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|91| = |1.063105086726578E-4|, err = 4.440892098500626E-16 to baseTmpDir/cleanOutput/largestCleanEigens
10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|92| = |4.172796540574965E-6|, err = 2.220446049250313E-16 to baseTmpDir/cleanOutput/largestCleanEigens
10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|93| = |1.3501805583453334E-13|, err = 0.9999999999998531 to baseTmpDir/cleanOutput/largestCleanEigens
10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|94| = |6.693867844514433E-14|, err = 0.9999999999999272 to baseTmpDir/cleanOutput/largestCleanEigens
10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|95| = |6.429188815193075E-14|, err = 0.9999999999999301 to baseTmpDir/cleanOutput/largestCleanEigens
10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|96| = |0.9212535428857824|, err = 0.0022864923931409376 to baseTmpDir/cleanOutput/largestCleanEigens
10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|97| = |4.458810960174187E-14|, err = 0.9999999999999515 to baseTmpDir/cleanOutput/largestCleanEigens
10/07/12 21:37:52 INFO decomposer.EigenVerificationJob: appending e|98| = |3.11917566773517E-14|, err = 0.999999999999966 to baseTmpDir/cleanOutput/largestCleanEigens


psc的特征值最好取那些小于1e-3(如果rank少的话50取少于0.02)的,而不是k-means中的k个
可以看到有些err比较大,这时不能删掉这些大err的eigenvalue/eigenvector,实验证明它们还十分有用。所以命令中maxError设大一点

1)bin/hadoop fs -put /media/disk-1/lastpaper/inputPoints /user/gushui/inputPoints

2)bin/hadoop jar ~/workspaces/newmyclusterworkspace/LanczosSVD/dest/produceDistributedRowMatrix.jar  注意设置行数和列数在class开头定义处

3)bin/hadoop jar lib/mahout-examples-0.3.job org.apache.mahout.math.hadoop.decomposer.DistributedLanczosSolver --input baseTmpDir/distMatrix --output baseTmpDir/outputEigen --numRows 204 --numCols 204 --rank 100 --symmetric true        要改变numRows, numCols, rank

4)bin/hadoop jar lib/mahout-examples-0.3.job org.apache.mahout.math.hadoop.decomposer.EigenVerificationJob --eigenInput baseTmpDir/outputEigen --corpusInput baseTmpDir/distMatrix --output baseTmpDir/cleanOutput --maxError 9

5)LanczosSVD/src/gushui/ConvertEigenvectorToTxtForKmeans:
这个类最开始的numCols要设置
这个main函数里
(1)convert.outputEigenVectorToTxt("baseTmpDir/cleanOutput/largestCleanEigens", "/media/disk-1/lastpaper/CMUPIE/lanczos150_knn50/outputEigens", 7, true);

执行这一句,把eigenvectors写出来.然后在生成的outputEigens里把特征值大的那个删掉,一般是最后一个--->对应的是outputEigens的第一行,把这一行去掉.

(2)convert.outputInColumnForm("/media/disk-1/lastpaper/CMUPIE/lanczos150_knn50/outputEigens", "/media/disk-1/lastpaper/CMUPIE/lanczos150_knn50/KmeansInputPoints");

注释掉上面这句
,再运行这个类的main函数

6)bin/hadoop jar ~/workspaces/newmyclusterworkspace/KMeans/dest/kmeans.jar
注意要设置的东西在开头,注意中心点要不要随机选,要随机选的话把writePointsAndCentersFromText()的List<Integer> centerIndexes = generateRandomCenterIndexes();的前面注释掉,不要随机选的话把这一句List<Integer> centerIndexes = generateRandomCenterIndexes();注释掉
分享到:
评论

相关推荐

    Lanczos3插值算法的matlab实现

    在MATLAB中,我们通常使用`imresize`函数来实现Lanczos插值,其中可以指定插值方法为`'lanczos3'`,这意味着使用窗宽为3的Lanczos核,即a=3。 **二、MATLAB实现** 在MATLAB中,`imresize`函数提供了多种图像缩放...

    matlab.zip_lanczos_matlab

    在IT领域,数值分析是解决复杂数学问题的关键技术...这些内容对于学习和研究数值计算、线性代数、工程分析以及MATLAB编程的用户来说具有很高的价值。通过理解和掌握这些工具,可以在解决实际问题时提高计算效率和精度。

    图像恢复的工具集HyNR_IRL

    此外,配套的论文则提供了算法的理论背景、实施细节以及实验结果,对于深入学习和理解图像复原技术具有重要参考价值。 总的来说,【图像恢复的工具集HyNR_IRL】是一个强大的图像处理工具,它利用创新的W-GCV和...

    《基于神经网络的监督和半监督学习方法与遥感图像智能解译》读书笔记模板.pptx

    基于极限学习机的监督学习方法是指通过极限学习机来实现监督学习,作者介绍了基于极限学习机的监督学习改进方法、极限学习机及其改进方法的仿真实例、基于局部Lanczos双对角化的极限学习机算法等。 二、半监督学习...

    基于MATLAB实现的lanczos算法用来计算大型稀疏矩阵的最大最小本征值及相应的本征矢量+使用说明文档.rar

    基于MATLAB实现的lanczos算法用来计算大型稀疏矩阵的最大最小本征值及相应的本征矢量+使用说明文档.rar 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 ...

    二维码生成器与识别器

    通过qrcode实现二维码的生成,通过Zbar实现二维码的识别。

    图像插值方法(3种方法,MATLAB代码)

    本资源包含三种常见的图像插值方法的MATLAB实现,以及相关的实验图片和文档,对于学习和理解图像插值原理非常有帮助。 1. 最近邻插值(Nearest Neighbour Interpolation) 最近邻插值是最简单的插值方法,它通过...

    数值分析(第二版)(全美经典学习指导系列)中文版

    6. **矩阵特征值与特征向量的计算**:幂迭代法、Gauss-Siedel迭代和 Lanczos 迭代,这些方法在信号处理、图像识别和控制理论中有广泛应用。 7. **数值稳定性和误差分析**:理解算法的稳定性是数值计算的关键,书中...

    有限元软件ANSYS飞机机翼的模态案例PPT学习教案.pptx

    "有限元软件ANSYS飞机机翼的模态案例PPT学习教案.pptx" 以下是根据标题、描述、标签和部分内容生成的知识点: 一、有限元软件ANSYS简介 * ANSYS是一款有限元分析软件,广泛应用于结构、热fluid、电磁、音频等领域...

    midasgen学习总结讲解.docx

    Midas Gen学习总结讲解 Midas Gen是一个功能强大且广泛应用于...* 特征值分析:Gen默认采用Lanczos,YJK默认采用WYD-Ritz * Gen关于楼板的定义:YJK单性板类型、Gen刚性板刚度、厚板与薄板、约束平面内旋转自由度等

    (总结)midasgen学习总结.pdf

    - 特征值分析:Gen默认采用Lanczos方法,YJK则为WYD-Ritz。 - 楼板定义:根据YJK的弹性板类型,Gen提供不同的板单元类型,如刚性板、弹性板3/6刚度和弹性膜刚度,满足不同结构需求。局部弹性楼板可以通过“解除刚...

    基于深度学习的单幅图像超分辨率重建算法综述.docx

    在深度学习未兴起前,经典的单幅图像超分辨率算法占据主导地位,Lanczos 重采样[1]和双三次插值[2]得到了广泛的应用,但采用插值方法有时会导致图像边缘和细节模糊,因此其他传统算法也被相继提出[3-5],有效地增强...

    OPENCV双线性插值算法

    在`opencv双线性.txt`这个文件中,很可能包含了使用OpenCV实现双线性插值算法的源代码示例,你可以通过阅读和理解这段代码,更深入地学习如何在实际项目中应用这一技术。同时,理解双线性插值的数学原理和其在图像...

    <> Trefethen and Bau, SIAM 习题答案8.2 10.2

    这本书深入浅出地介绍了数值线性代数这一领域的核心概念和方法,对于学习和研究科学计算有着极高的价值。在本书中,8.2章和10.2章涉及的是矩阵特征值和特征向量的计算,以及与之相关的稳定性和迭代方法等重要主题。 ...

    小图无损品质放大工具

    常见的超分辨率技术有基于样例的超分辨率(例如bicubic或 lanczos 插值)、基于模型的超分辨率和基于学习的超分辨率(利用深度学习网络,如SRCNN, VDSR, EDSR等)。 2. **插值方法**:这是最基础的无损放大技术,...

    在压缩感知领域常用的SpaRCS包

    在实际应用中,例如在大规模数据集分析、图像处理、机器学习模型压缩等方面,数据往往可以表示为稀疏低秩矩阵。SpaRCS通过迭代过程,找到最优的稀疏系数和低秩矩阵,从而实现对原始数据的精确重构。 在SpaRCS中,...

Global site tag (gtag.js) - Google Analytics