ManifoldLearning.jl中的非空集合错误

时间:2015-11-16 17:39:46

标签: julia

我尝试使用Isomap包中的ManifoldLearning.jl算法(https://github.com/wildart/ManifoldLearning.jl)。但是,按照文档(http://manifoldlearningjl.readthedocs.org/en/latest/isomap.html)中提供的用法示例,抛出以下错误:

ERROR: LoadError: ArgumentError: collection must be non-empty in extrema at reduce.jl:337 in classical_mds at /Users/rprechelt/.julia/v0.4/MultivariateStats/src/cmds.jl:75 in transform at /Users/rprechelt/.julia/v0.4/ManifoldLearning/src/isomap.jl:75 in isomap at /Users/rprechelt/code/julia/subwoofer.jl:198

其中第198行为transform(Isomap, X; k=12, d=2),其中X为非空(使用isempty验证)数组,其中每列都是数据样本。

我已尝试从reduce.jl追溯错误,但我无法找到收集变为非空的位置。相同的数组(X)与LTSA以及ManifoldLearning.jl包中的其他算法完美配合,而不是Isomap。

之前有没有遇到过这个?有什么建议吗?

2 个答案:

答案 0 :(得分:2)

Isomap调用从原始数据构造的测地距离矩阵的经典多维缩放。通常,MDS算法执行频谱分解以找到适当的嵌入。从上面的错误中,看起来分解返回了测地距离矩阵的空光谱。在任何情况下,最好在GitHub上打开包项目的错误问题,以便进一步调查。

答案 1 :(得分:1)

有时会发生的一件事是,如果你的点恰好在一条线上,那么由MDS创建的矩阵是1级,根据实现,如果你在搜索Isomap,这可能会导致错误嵌入超过1个方向。

肮脏的黑客修复:为你的所有输入点添加少量随机噪声(我想到你的数组X的所有元素)。