2012-02-22 3 views
1

Я пытаюсь рассчитать medoid в matlab. Однако я не знаю, как это сделать. Мой набор данных состоит из нескольких точек трехмерных данных (так что облако точек в системе с тремя осями). Медоидом является точка «, чья средняя несходство ко всем остальным объектам в кластере минимальна» (wikipedia).Медоуидный расчет

Кто-нибудь знает, как вычислить медоид в Matlab?


Btw .: Насколько я знаю k-medoid algorithm не может быть использован для расчета медоида (эффективно), поэтому я ищу другой путь.

ответ

3

Не должно быть трудно сделать это после предоставления показателя. Вот реализация для скаляров:

 function m = medoid(set,metric) 
      [X,Y] = meshgrid(set,set); %Create all possible pairs 
      dist = metric(X,Y); %Run metric 

      %Each distance is calculated twice, that doesn't matter. 
      %Also addition of zeros doesn't matter because we are looking for minimum. 
      totalDist = mean(dist,1); 

      [~,i] = min(totalDist); 
      m = set(i); 
    end 

И Прецедент:

metric = @(x,y) (abs(x-y)); 
m = medoid([1 2 3 3 3 3 3], metric) 

Вы можете продлить его на векторы, я оставлю его в качестве упражнения для читателя. (Или тот, кто хочет добавить улучшенный ответ).

+0

В вашем примере вы используете 1d данные, не так ли? Как это будет работать для 3d-данных (с значениями x, y, z)? –

+0

@SamuelKiely, это не сработает. Я написал это, чтобы дать общее направление. –