Использование функции карты из purrr для проверки двух параметров одной функции UMAP в R - PullRequest
0 голосов
/ 18 июня 2020

newb ie снова нужна помощь. Я играю с набором данных с помощью 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 Ответ

1 голос
/ 18 июня 2020

Попробуйте:

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)})
}))
...