#r #cluster-analysis #k-means #unsupervised-learning
#r #кластерный анализ #к-означает #без присмотра-обучение
Вопрос:
У меня проблема с контролем шаблона двух меток классов (1 и 2), что приводит к задаче классификации с использованием k-медоидов. Я хотел бы применить cluster::clara
в двух областях ( ID
) g2
и g3
одну и ту же классификационную метку для обеих областей, в моем примере:
# Packages library(cluster) library(ggplot2) my_ds lt;-read.csv("https://raw.githubusercontent.com/Leprechault/trash/main/class_areas_ds.csv") str(my_ds) # 'data.frame': 194789 obs. of 5 variables: # $ x : num 426060 426060 426060 426060 426060 ... # $ y : num 8217410 8217410 8217410 8217410 8217410 ... # $ ID : chr "g2" "g2" "g2" "g2" ... # $ R : num 0.455 0.427 0.373 0.463 0.529 ... # $ HUE: num -0.00397 -0.00384 -0.0028 -0.00369 -0.00352 .. # Classification based in `R` and `HUE` variables reslt;-NULL areaslt;-unique(my_ds$ID) for(i in 1:length(areas)){ my_ds_splitlt;-my_ds[my_ds$ID==areas[i],] k.medoids.reslt;-cluster::clara(my_ds_split[,4:ncol(my_ds_split)], 2, metric ="manhattan") my_ds_split.Flt;-cbind(my_ds_split, class = k.medoids.res$clustering) my_ds_split.F$classlt;-ifelse(my_ds_split.F$class==1,0,1) reslt;-rbind(res,cbind(my_ds_split.F)) } reslt;-as.data.frame(res) # Plot the results plots lt;- list() for (g in 1:length(areas)) { my_ds_split_classlt;-res[res$ID==areas[g],] plots[[g]] lt;- ggplot() geom_point(data=my_ds_split_class, aes(x=x, y=y, color=class)) theme_void() } plots[[1]]
plots[[2]]
На графиках классификация области g2
противоположна g3
и сделать только одну классификацию с g2
набором данных и g3
набором данных вместе не вариант, потому что я-мой исходный набор данных, у меня 90 тысяч областей, а моя оперативная память составляет всего 64 ГБ.
Пожалуйста, помогите мне найти способ создать одно и то же соглашение о классификации между несколькими областями?
Ответ №1:
В этом есть какой-то подвох! Вам нужно всегда начинать с более высоких или более низких значений набора данных, просто ставьте и удаляйте их только после классификации и работает очень хорошо, в этом случае используя меньшее значение в переменной R
:
library(dplyr) my_ds_splitlt;-my_ds[my_ds$ID==areas[i],] min.start.value lt;- my_ds_split %gt;% slice(which.min(R)) my_ds_split lt;- rbind(min.start.value,my_ds_split) k.medoids.reslt;-cluster::clara(my_ds_split[,4:ncol(my_ds_split)], 2, metric ="manhattan") my_ds_split.Flt;-cbind(my_ds_split, class = k.medoids.res$clustering) my_ds_split.Flt;-my_ds_split.F[-c(1),]