You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Julia的MultivariateStats.jl中区分MDS与PCA及报错排查

在MultivariateStats.jl中使用Metric MDS时遇到MethodError的解决方法

问题背景

在MultivariateStats.jl中同时使用PCA和MDS,代码如下:

M = fit(PCA, matrix; maxoutdim=2)
Yte = predict(M, matrix)
M1 = fit(MDS, matrix; maxoutdim=2, distances=false)
Yte1 = predict(M1)

发现当MDS采用欧氏范数时,Yte与Yte1结果一致,此场景下MDS与PCA等价。随后尝试调用带自定义metric的MDS:

mds = fit(MDS, matrix; distances=true, metric=isotonic)

出现如下错误:

MethodError: no method matching fit(::Type{MDS}, ::Adjoint{Float64, Matrix{Float64}}; distances=true, metric=MultivariateStats.isotonic)
Closest candidates are:
fit(::Type{MDS}, ::AbstractMatrix{T}; maxoutdim, distances) where T<:Real at ~/.julia/packages/MultivariateStats/cFZlL/src/cmds.jl:232 got unsupported keyword argument "metric"

解决方法

问题出在调用类型的选择上:MDS类型默认对应经典多维缩放(Classical MDS),不支持metric参数;而带自定义度量的是Metric MDS,需要使用MetricMDS类型来调用。

正确的调用代码如下:

mds = fit(MetricMDS, matrix; distances=true, metric=isotonic)

额外注意事项:

  • 确保MultivariateStats.jl为最新版本,MetricMDS是较新版本引入的功能,旧版本可能不支持。
  • 如果输入的matrix是Adjoint类型(比如转置后的矩阵),可以先转换为普通矩阵:matrix = Matrix(matrix),避免类型匹配问题。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:55:22