R: реализация Mahalanobis в cmeans [e1071]

Мне просто интересно, есть ли способ в функции cmeans [в пакете e1071], чтобы выполнить кластеризацию, используя расстояние Махаланобиса?

Большое спасибо

1 ответ

e1071 Пакет не имеет варианта Махаланобис. Тем не менее, вы можете посмотреть в cluster пакет и fanny функция. Согласно странице справки, он также вычисляет нечеткую кластеризацию данных в k-кластеры. С помощью этой функции вы можете предоставить свою собственную матрицу расстояний.

Таким образом, для расстояния Махаланобис, вы можете рассчитать матрицу расстояний с dist а затем запустите кластеризацию.

require(cluster)
set.seed(123)
x<-rbind(matrix(rnorm(100,sd=0.3),ncol=2),
         matrix(rnorm(100,mean=1,sd=0.3),ncol=2))
y <- dist(x, "mahalanobis")
fanny(y, k=2)

Учитывая вашу понятную озабоченность по поводу эквивалентности между функциями здесь приведем пример их сравнения:

require(e1071)
cl<-cmeans(x,centers=2,iter.max=20,dist="euclidean",method="cmeans",m=2)
fl <- fanny(x, k=2, maxit=20, metric="SqEuclidean", memb.exp=2)

> head(cl$membership)
             1           2
[1,] 0.9948729 0.005127121
[2,] 0.3647778 0.635222221
[3,] 0.9290126 0.070987385
[4,] 0.7588260 0.241174043
[5,] 0.9282550 0.071745007
[6,] 0.9599231 0.040076886
> head(fl$membership)
          [,1]        [,2]
[1,] 0.9948722 0.005127775
[2,] 0.3647890 0.635211040
[3,] 0.9290171 0.070982905
[4,] 0.7588304 0.241169649
[5,] 0.9282575 0.071742489
[6,] 0.9599221 0.040077878

Хотя они не совсем идентичны, вы можете видеть, что они очень близки. Вы также заметите, что fanny указывает евклидово расстояние в квадрате, что и делает cmeans. Эта эквивалентность отмечена на странице справки Fanny ?fanny по метрике.

Другие вопросы по тегам