порядок строк в матрице на основе индекса наиболее похожей строки в другой матрице - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь «расставить» строки матрицы, содержащей центроиды некоторых кластеров, которые не находятся в том же порядке, что и порядок, в котором образцы были назначены кластерам.Сначала я сравнивал абсолютное значение расстояния между точками данных среднего значения и центрами кластеров и назначал индекс строки, у которой было наименьшее расстояние.Конечно, мне не разрешено иметь дубликаты индексов.Это работало довольно хорошо, но симметричные значения поднимают проблему (то есть, из-за абсолютного значения для расстояния, зеркальные кластеры не были упорядочены должным образом).Также я попытался заказать их на основе дисперсии, не получилось, как ожидалось.Я смотрел на функции order () и sort () и нашел пример, который не работал.

order(mean)        
order(mean)[centers]       
sort(order(mean)[centers]) 
mean[sort(order(mean)[centers])]

Я также попробовал

apply(mean==centers,1,all)

, но, конечно, это простовезде возвращает FALSE.

Пример матриц:

means <- c(0.055190097, 0.032412395,    0.015372307,    -0.008012372,
-0.018736792,   -0.078138715, -0.058707713,   -0.044020629,
-0.023750329,   -0.014402083, -0.069920581,   -0.064429216,
-0.059913345,   -0.052302253,   -0.047874074,  0.050557395,
0.047246979,    0.044577065,    0.040384336,    0.038140009,
0.114954601,    0.108110051,    0.102531680,    0.093341425,    0.088140310)
dim(means) <- c(5,5)
means <- t(means)


centers <- c(-0.038754, -0.021588,-0.008851,    0.008579,   0.016579,
 0.018371,   0.006095,   -0.003026,  -0.015537, -0.021286,
-0.078143,  -0.069267,  -0.062197,   -0.051295,  -0.045521,
 0.033145,   0.033348,   0.033354,   0.032947,   0.032511,
 0.115464,   0.105248,   0.097172,   0.084732,   0.078162)
dim(centers) <- c(5,5)
centers <- t(centers)

Например, (с приведенным выше примером) строка 2 из матрицы означает, что соответствует строке 3из матрицы центров , так как она ближе всего к расстоянию (точка данных).Итак, я должен найти, какая строка из означает, что соответствует какой линии в центрах (без дубликатов).Мои матрицы больше, но этого должно быть достаточно в качестве примера. У вас есть предложения?Спасибо

1 Ответ

0 голосов
/ 25 января 2012

Ну, я не нашел никакой встроенной функции для выполнения работы, поэтому я просто реализовал рекурсивный алгоритм, который заботится о работе ... даже если это не способ программирования на R, по крайней мере, он решаетпроблема.Могу добавить, что в этом конкретном случае довольно неприятная проблема, но теперь она работает.Спасибо всем, кто проявил интерес к этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...