Использование функции карты из purrr для проверки двух параметров одной функции UMAP в R

Новичку снова нужна помощь. Я играю с набором данных с помощью UMAP, инструмента для уменьшения размеров. Такие вещи будут иметь 2 параметра, которые нужно настроить и посмотреть. Раньше я использовал tSNE, и он требует настройки одного параметра. Для tSNE этот параметр называется недоумением. Чтобы проверить несколько значений на предмет недоумения и визуализировать результат, я думаю, что функция карты в purrr отлично подходит для автоматизации этого.

#for this purpose the sample data can be anything
#only that my dataset has lots labels
df <- data.frame(replicate(110,sample(-10:10,1000,rep=TRUE)))
df.label <- df[,1:20]
df.data <- df[,21:110]

library(tsne)
library(purrr)
#set the test values for perplexity a vector
#map along a vector

perplex=c(10,20,50,100)
map(perplex,tsne(df.data,perplexity = perplex))

Результат tense() будет генерировать координату оси / у для каждой строки (образца), после чего я могу построить их. Хотя небольшая помощь здесь, чтобы научить меня, как автоматически отображать все 4 результата теста, будет замечательной, в противном случае мне придется использовать график 4 раза, каждый с x=tsne[,1] и y=tsne[,2].

Теперь о umap, который я хочу протестировать. Я хочу таким же образом протестировать 2 параметра, n_neighbors и min_dist. И сложность заключается в том, что для каждого значения, которое я выбираю для n_neighbors, я хочу проверить все тестовые значения min_dist. Например, если: n_neighbors= 10,50,20 min_dist= 0.1, 0.5, 1, 10 Я хочу запустить функцию umap для моих данных для n_neighbors= 10 и повторить min_dist= 0.1, 0.5, 1, 10. И повторить это для остального значения n_neighbors.

Тогда я застрял с функцией карты в мурлыке. Я думаю, что могу передать в функцию только 1 вектор.

#map along a vector
n_neighbors.test= c(10,50,20)
min_dist.test= c(0.1, 0.5, 1, 10)

map(?,umap(df.data,n_neighbors= n_neighbors.test, min_dist=min_dist.test ))

а затем еще и вопрос построения графика. UMAP также дает список, одна матрица - это макет, который содержит координаты x/y строк.

1 ответ

Пытаться:

expand.grid(n_neighbors.test,n_neighbors) %>% transpose() %>% map(~{umap(df.data,n_neighbors = .x[[1]], min_dist=.x[[2]] )})

Как вариант, вы можете использовать составные карты:

unlist(map(n_neighbors.test,function(x){
  map(min_dist.test,function(y){umap(df.data,x,y)})
}))
Другие вопросы по тегам