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
по метрике.