Рассчитать расстояния от центральной точки до всех точек и выбрать точку, которая является самой дальней в R?

Я новичок в R и хочу реализовать следующий алгоритм:

  • Шаг 1. Выберите одну из точек набора данных случайным образом в качестве центра первого кластера

  • Шаг 2. Для следующего кластера найдите точку с максимальным расстоянием до центра предыдущего кластера, который еще не был выбран в качестве центра

  • Шаг 3. Затем выберите эту точку в качестве центра следующего кластера.

  • Шаг 4. Повторяйте шаги 2 и 3, пока не инициализируете центры всех кластеров.

Я попытался написать этот алгоритм. Я получил расстояния, но не смог сопоставить их с исходными точками или выполнить итерации, чтобы получить следующие 25 очков.

Может кто-то помочь мне, пожалуйста?

img_list=list.files()
img_list


img_mat_list <- as.matrix(lapply(img_list,readJPEG))
img_mat_list

images = as.matrix(do.call(rbind,img_mat_list))
dim(images)
[1] 2184   12

means = as.matrix(lapply(img_mat_list, mean))



s1 = sample(images, 30)
> dput(s1)
c(0.141176470588235, 1, 1, 0.682352941176471, 1, 0.925490196078431, 
0.0274509803921569, 0.00784313725490196, 0.364705882352941,0.96078431372549, 
0, 0.16078431372549, 0.972549019607843, 0.0274509803921569, 1, 
0.929411764705882, 0.00392156862745098, 0.972549019607843, 1, 
1, 0.6, 0, 0.23921568627451, 0, 0.988235294117647, 0.0156862745098039, 
0, 0.945098039215686, 0, 0.996078431372549)
> s2 = sample(means, 30)
> dput(s2)
list(0.621813725490196, 0.666421568627451, 0.51797385620915, 
    0.53287037037037, 0.489297385620915, 0.678513071895425, 0.693845315904139, 
    0.618600217864924, 0.567892156862745, 0.64332788671024, 0.342565359477124, 
    0.568082788671024, 0.589351851851852, 0.602205882352941, 
    0.689025054466231, 0.460484749455338, 0.71266339869281, 0.479575163398693, 
    0.677941176470588, 0.602205882352941, 0.466530501089325, 
    0.516884531590414, 0.568082788671024, 0.604738562091503, 
    0.557080610021786, 0.544580610021786, 0.619226579520697, 
    0.515032679738562, 0.524754901960784, 0.516884531590414)

    centers = list()
    K = 26

    center = sample(means, 1) 
    distance = function(point, group) {
    return(dist(t(array(c(point, t(group)), dim=c(ncol(group),      1+nrow(group)))))[1:nrow(group)])}
for (i in 1 : length(K))
  for (j in 1 : length(means))
    distances = distance(center, means)
    centers[i] = which.max(distances)


distances
  [1] 0.027151416 0.035185185 0.018899782 0.027151416
  [5] 0.035185185 0.018899782 0.027151416 0.126633987
  [9] 0.126443355 0.126443355 0.075435730 0.126633987



 > centers
 [1] 60 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[17] NA NA NA NA NA NA NA NA NA 60

расстояния представляют собой массив из 182 расстояний

и центры должны быть центрами кластеров

0 ответов

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