我尝试使用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。
之前有没有遇到过这个?有什么建议吗?
答案 0 :(得分:2)
Isomap调用从原始数据构造的测地距离矩阵的经典多维缩放。通常,MDS算法执行频谱分解以找到适当的嵌入。从上面的错误中,看起来分解返回了测地距离矩阵的空光谱。在任何情况下,最好在GitHub上打开包项目的错误问题,以便进一步调查。
答案 1 :(得分:1)
有时会发生的一件事是,如果你的点恰好在一条线上,那么由MDS创建的矩阵是1级,根据实现,如果你在搜索Isomap,这可能会导致错误嵌入超过1个方向。
肮脏的黑客修复:为你的所有输入点添加少量随机噪声(我想到你的数组X的所有元素)。