MDS: supply Gram matrix directly
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 30/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- julia
- Área
- data-visualization
Línea de trabajo
Comienza localizando los puntos de entrada existentes para el ajuste MDS y las conversiones dmat2gram y gram2dist mencionadas en el issue. Compara las rutas actuales de coordenadas y distancias antes de decidir la API de etiquetado de entradas; se considera terminado cuando se admite la entrada directa de una matriz de Gram sin romper el comportamiento existente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Currently the pipeline for MDS is X -> D -> G -> M, where X is a coordinate representation of the data, D is the pairwise distance matrix, G is the Gram matrix, and M is the final MDS model. One can alternatively go D -> G -> M by supplying the distances=true keyword. However, there are applications where the natural thing to supply is G. For example, if you are working with objects for which there is a natural inner product, and you want to visualize these objects in a lower-dimensional space, you're going to first compute G, and it would be quite silly to use fit(MDS, gram2dist(G); distances=true) when the first thing that will happen inside fit is to convert the distances back into the Gram matrix.
I know there isn't a ton of stuff inside fit that happens after you have G, but from the standpoint of keeping things in sync I think it would be best to expose this to the user instead of forcing them to create their own private version of fit.
The only hard problem is deciding the API. I think a good design would be
struct Distances{M<:AbstractMatrix}
D::M
end
struct Gramian{M<:AbstractMatrix}
G::M
end
fit(::Type{MDS}, X::AbstractMatrix) = fit(MDS, Distances(L2distance(X)))
fit(::Type{MDS}, D::Distances) = fit(MDS, Gramian(dmat2gram(D.D)))
function fit(::Type{MDS}, G::Gramian)
# the "main" implementation
end
Then users call one of:
fit(MDS, X)fit(MDS, Distances(D))fit(MSD, Gramian(G))
depending on what kind of starting point they have.
One alternative approach is to use a keyword argument, but here we would run into a compatibility problem: if we add gramian::Bool=false as a keyword, then we have to look for the case where distances == gramian == true and throw an error. This is not a big deal but it feels a bit ugly. Alternatively we could add interpretation=:coordinates and support the settings :distances and :gramian but that would be a breaking change. We can do a breaking change, but it seems to be a bit silly for a very minor change. With the "type tagging" of the input data, we could have fit(::Type{MDS}, X::AbstractMatrix) still support the distances kwarg but give a deprecation warning, and then we can remove that API whenever other more substantive changes force a breaking release.
- Lenguaje dominante
- Julia
- Estrellas
- 387
- Forks
- 83
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de JuliaStats/MultivariateStats.jl
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
tagbot-manual
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
JuliaStats/MultivariateStats.jl#238 · 1 comentario ·
-
Return a result even when MetricMDS does not convergePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
JuliaStats/MultivariateStats.jl#233 · 1 comentario ·
-
How to use MetricMDSAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
JuliaStats/MultivariateStats.jl#231 · 2 comentarios ·
Todos los issues de JuliaStats/MultivariateStats.jl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
oscar-system/GAP.jl#1455 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
JuliaAI/MLJTransforms.jl#85 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
SciML/OrdinaryDiffEq.jl#4875 ·
Los mantenedores suelen responder en 4 días
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
SciML/NonlinearSolve.jl#1372 ·
Los mantenedores suelen responder en 1 día