Отображение расстояний до цветов - PullRequest
0 голосов
/ 07 декабря 2018

Предполагая матрицу расстояний между количеством выборок, я хотел бы как-то разумно отобразить эти расстояния в цветовом пространстве.Например, если у вас есть три видимых кластера, они должны иметь разные цвета, а внутри кластера у вас будет несколько оттенков цвета.Однако я бы хотел избежать явной кластеризации, если это возможно.

Очевидно, что отображение не может быть совершенным и универсальным: скорее, оно эвристическое.

Существует ли известный алгоритм для этого?Или, может быть, готовое решение для R?

1 Ответ

0 голосов
/ 10 декабря 2018

Вот одна возможность.Независимо от того, сколько измерений были ваши исходные данные, вы можете использовать многомерное масштабирование с матрицей расстояний, чтобы проецировать данные в три измерения таким образом, чтобы грубо сохранять расстояния.Если вы рассматриваете эти три измерения как R, G и B, это даст цветовую схему, в которой точки, которые находятся близко, должны иметь «близкие» цвета.

Вот простой пример.Я генерирую некоторые 5-мерные данные с 4 кластерами (хотя кластерный анализ не выполняется).Отсюда получаем матрицу расстояний.Затем, как указано выше, мы используем многомерное масштабирование, чтобы превратить это в цветовую карту.Точки строятся, чтобы показать результат.

## Generate some sample data
set.seed(1234)
v = c(rnorm(80,0,1), rnorm(80,0,1), rnorm(80,4,1), rnorm(80,4,1)) 
w = c(rnorm(80,0,1), rnorm(80,4,1), rnorm(80,0,1), rnorm(80,4,1)) 
x = c(rnorm(80,0,1), rnorm(80,0,1), rnorm(80,4,1), rnorm(80,4,1)) 
y = c(rnorm(80,0,1), rnorm(80,4,1), rnorm(80,0,1), rnorm(80,4,1)) 
z = c(rnorm(80,0,1), rnorm(80,4,1), rnorm(80,-4,1), rnorm(80,8,1)) 
df = data.frame(v,w,x,y,z)

## Distance matrix
D = dist(df)

## Project to 3-dimensions
PROJ3 = cmdscale(D, 3)

## Scale the three dimensions to [0,1] interval
ScaledP3 = apply(PROJ3, 2, function(x) { (x - min(x))/(max(x)-min(x)) })
colnames(ScaledP3) = c("red", "green", "blue")
X = as.data.frame(ScaledP3)
## Convert to color map
ColorMap = do.call(rgb, X)
plot(x,y, pch=20, col=ColorMap)

Points colored by Distance

...