отредактировано для повышения качества вопроса в результате (вполне уместной) порки, полученной Spacedman!
У меня есть объект k-ближайших соседей (igraph), который я создал как таковой, используя загруженный мной файл здесь:
Я выполнил следующие операции с данными, чтобы создать матрицу смежности расстояний между наблюдениями:
W <- read.csv("/path/sim_matrix.csv")
W <- W[, -c(1,3)]
W <- scale(W)
sim_matrix <- dist(W, method = "euclidean", upper=TRUE)
sim_matrix <- as.matrix(sim_matrix)
mygraph <- nng(sim_matrix, k=10)
Это дает мне хороший список вершин и их десять ближайших соседей, небольшой пример следует ниже:
1 -> 25 26 28 30 32 144 146 151 177 183 2 -> 4 8 32 33 145 146 154 156 186 199
3 -> 1 25 28 51 54 106 144 151 177 234 4 -> 7 8 89 95 97 158 160 170 186 204
5 -> 9 11 17 19 21 112 119 138 145 158 6 -> 10 12 14 18 20 22 147 148 157 194
7 -> 4 13 123 132 135 142 160 170 173 174 8 -> 4 7 89 90 95 97 158 160 186 204
Все идет нормально.
Однако я борюсь с тем, как получить доступ к значениям весов между вершинами, с которыми я могу выполнять значимые вычисления. Не должно быть так сложно, это обычное дело для графиков, не так ли?
Посмотрев документацию, я попробовал:
degree(mygraph)
что дает мне сумму весов для каждого узла. Но мне не нужна сумма, мне нужны необработанные данные, чтобы я мог делать свои собственные вычисления.
Я пытался
get.data.frame(mygraph,"E")[1:10,]
но здесь нет расстояний между узлами:
from to
1 1 25
2 1 26
3 1 28
4 1 30
5 1 32
6 1 144
7 1 146
8 1 151
9 1 177
10 1 183
Я попытался получить значения весов между вершинами вне графического объекта, с которыми я могу работать, но безуспешно.
Если у кого-то есть идеи, как подойти к этому, я был бы признателен. Спасибо.
sim_matrix[i,j]
для каждого изfrom, to
, чтобы считать расстояние, еслиsim_matrix
- это матрица расстояний NxN .... в противном случае, если это матрица данных Nxm, тогда найдите данные и выполните пифагор. - person Spacedman   schedule 11.05.2014sim_matrix
. Простоread.csv
дает мне матрицу 252x253 .. чего? Расстояния? С дополнительной колонкой в начале. Хорошо, мне нужно вычистить это ... Почему я это делаю? Вы должны просто вставить две или три строки, которые ВЫ уже разработали, чтобы нам не пришлось. - person Spacedman   schedule 12.05.2014dx=sim_matrix
в своемnng
вызове. Это имеет огромное значение для получения возможных расстояний, поскольку в первом случае это просто поиск, а во втором - расстояния Пифагора (или манхэттена, или махаланобиса). - person Spacedman   schedule 12.05.2014get.adjlist(mygraph)[[1]]
очень немного отличается, так что вы либо предоставили нам другие данные, либо допустили опечатку. Я знаю, что это мелочь, но здесь так важна точность. Также я думаю, что теперь ясно, чтоsim_matrix
- это матрица расстояний, поэтому вам нужно сделатьdx=sim_matrix
илиx=W
, иначе ваш график - неправильный вариант для начала. Сначала получите код, работающий с крошечными вручную доказываемыми примерами. - person Spacedman   schedule 13.05.2014