我正在使用Math.NET的奇异分解对一些数据库进行PCA分析。根据列和行的数量,算法会不稳定地运行(所以我假设它不会收敛)。
我认为Math.NET的SVD实现是基于LAPACK的。
所以我想知道这个算法或我的数据集的特征是否有任何限制可能导致这种情况。
PS.:数据在每个属性之间似乎没有太多的协方差。
对于大多数(如果不是全部)用于计算奇异值分解的算法,不能保证该算法会终止,尽管极少数情况下不会终止。好的实现,如LAPACK,将在一定数量的迭代后停止并返回错误。
在您的情况下,矩阵大小约为100(我假设当您说超过约70时,您的意思不是更多),计算SVD最多需要几秒钟。如果需要更长的时间,那么您的矩阵可能是库使用的算法不收敛的极少数情况之一。我想说,你更有可能发现了一个bug,在这种情况下,你可能应该联系库的维护人员。