wildart/ManifoldLearning.jl

Is diffusion map working?

Closed this issue · 3 comments

When I try diffusion map, I encounter this error.
I also found that document needs update.

model = fit(DiffMap, X; dims=2, t=1, ɛ=1.0)
MethodError: no method matching fit(::Type{DiffMap}, ::Array{Float64,2}; dims=2, t=1, ε=1.0)
Closest candidates are:
  fit(::Type{DiffMap}, ::AbstractArray{T<:Real,2}; maxoutdim, t, ε) where T<:Real at /home/pika/.julia/packages/ManifoldLearning/jTQMq/src/diffmaps.jl:38 got unsupported keyword argument "dims"
  fit(!Matched::Type{StatsBase.Histogram}, ::Any...; kwargs...) at /home/pika/.julia/packages/StatsBase/Zfd1X/src/hist.jl:383
  fit(!Matched::StatsBase.StatisticalModel, ::Any...) at /home/pika/.julia/packages/StatsBase/Zfd1X/src/statmodels.jl:152 got unsupported keyword arguments "dims", "t", "ε"
  ...

Stacktrace:
 [1] kwerr(::NamedTuple{(:dims, :t, :ε),Tuple{Int64,Int64,Float64}}, ::Function, ::Type, ::Array{Float64,2}) at ./error.jl:125
 [2] (::getfield(StatsBase, Symbol("#kw##fit")))(::NamedTuple{(:dims, :t, :ε),Tuple{Int64,Int64,Float64}}, ::typeof(fit), ::Type{DiffMap}, ::Array{Float64,2}) at ./none:0
 [3] top-level scope at In[7]:1

If there is anything I can help, I can fix it myself and pull request.
I just need more information about this error...

it's maxoutdim not dims

dims used in selecting an observation layout - columns or rows (as it defined in StatsBase) and this parameters isn't implemented

Fill free to implement it. PRs are always welcome.

model = fit(DiffMap, X; maxoutdim=2, t=1, ɛ=1.0)

And I got

┌ Warning: fit(t, x) is deprecated: use fit(t, x, dims=2) instead
│   caller = #standardize#187(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(StatsBase.standardize), ::Type{StatsBase.UnitRangeTransform}, ::Array{Float64,2}) at transformations.jl:384
└ @ StatsBase /home/pika/.julia/packages/StatsBase/Zfd1X/src/transformations.jl:384
MethodError: no method matching StatsBase.UnitRangeTransform(::Int64, ::Nothing, ::Bool, ::Array{Float64,1}, ::Array{Float64,1})
Closest candidates are:
  StatsBase.UnitRangeTransform(::Int64, !Matched::Int64, ::Bool, ::Array{T,1}, ::Array{T,1}) where T at /home/pika/.julia/packages/StatsBase/Zfd1X/src/transformations.jl:219

Stacktrace:
 [1] #fit#181(::Nothing, ::Bool, ::typeof(fit), ::Type{StatsBase.UnitRangeTransform}, ::Array{Float64,2}) at /home/pika/.julia/packages/StatsBase/Zfd1X/src/transformations.jl:284
 [2] fit(::Type{StatsBase.UnitRangeTransform}, ::Array{Float64,2}) at /home/pika/.julia/packages/StatsBase/Zfd1X/src/transformations.jl:270
 [3] #standardize#187(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(StatsBase.standardize), ::Type{StatsBase.UnitRangeTransform}, ::Array{Float64,2}) at /home/pika/.julia/packages/StatsBase/Zfd1X/src/transformations.jl:384
 [4] standardize(::Type{StatsBase.UnitRangeTransform}, ::Array{Float64,2}) at /home/pika/.julia/packages/StatsBase/Zfd1X/src/transformations.jl:384
 [5] #fit#12(::Int64, ::Int64, ::Float64, ::typeof(fit), ::Type{DiffMap}, ::Array{Float64,2}) at /home/pika/.julia/packages/ManifoldLearning/jTQMq/src/diffmaps.jl:38
 [6] (::getfield(StatsBase, Symbol("#kw##fit")))(::NamedTuple{(:maxoutdim, :t, :ε),Tuple{Int64,Int64,Float64}}, ::typeof(fit), ::Type{DiffMap}, ::Array{Float64,2}) at ./none:0
 [7] top-level scope at In[3]:1

OK, I think I know how to fix it.

PR in #19.