Цвет диаграммы рассеяния по расстоянию до соседа - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь создать график из результата tSNE, окрашивая точки на основе плотности их окрестностей - это количество соседей вокруг точки и расстояние до соседей.

Учитывая матрицуКоординаты результата tSNE:

            [,1]       [,2]
  [1,] -4.2060515  3.1718312
  [2,] -4.2671476  5.6677296
  [3,] -3.1792470  3.5504695
  [4,] -3.2507526  4.7510075
  [5,] -4.5662531  3.3866132
  [6,] -5.0863544  3.1760014
  [7,] -4.7380256  5.5291478
  [8,] -5.0510355  5.0373626
  [9,] -4.3288679  4.3316772
 [10,] -5.2947188  4.6130757
[etc,] ...         ...

Я хочу быть в состоянии раскрасить точки в соответствии с критериями выше.

Но пока все, что я могу получить, это то, что это только среднееЕвклидово расстояние, но это не правильно:

this

В идеале мне нравится нечто похожее на грубый макет, где точки, расположенные ближе друг к другу, окрашены темнее, чем точки, у которых меньше местных соседей:this

d <- dist(best.tsne, method = "euclidean")`
d.scaled <- quick.scale(apply(as.matrix(d), 2, sum),
                        floor = 0, ceiling = 1)
ii <- cut(d.scaled,
          breaks = seq(min(d.scaled), max(d.scaled), len = 100),
          include.lowest = TRUE)
colors <- colorRampPalette(c("white", "blue"))(99)[ii]

Я в порядке с назначением цветов и т. Д., Просто нужно уметь подсчитывать очки за очки.

1 Ответ

0 голосов
/ 21 мая 2018

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

Я приведу несколько примеров:

1 - двумерное ядро:

# With kde2d {MASS}
library(MASS)
attach(geyser)
plot(duration, waiting, xlim = c(0.5,6), ylim = c(40,100))
f1 <- kde2d(duration, waiting, n = 50, lims = c(0.5, 6, 40, 100))
image(f1)

2 - измерение ad-hoc (1):

# Trimean 20%
apply(as.matrix(d), 2, mean, trim = 0.8)

3 - Измерение ad-hoc (2):

# Normalized inverse distance
apply(as.matrix(1/((1+d)/max(1+d))), 2, mean)

С уважением !!

...