k-medoids:控制 class 标签上的相同协议

k-medoids: control same agreement on class label

我在使用 k-medoids 控制两个 class 标签(1 和 2)的模式导致 classification 任务时遇到问题。在我的示例中,我想在两个区域 (ID) g2g3 中应用 cluster::clara 以及两个区域相同的 classification 标签:

# Packages
library(cluster)
library(ggplot2)

my_ds <-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
res<-NULL
areas<-unique(my_ds$ID)
for(i in 1:length(areas)){
  my_ds_split<-my_ds[my_ds$ID==areas[i],]
  k.medoids.res<-cluster::clara(my_ds_split[,4:ncol(my_ds_split)], 2, metric ="manhattan")
  my_ds_split.F<-cbind(my_ds_split, class = k.medoids.res$clustering)
  my_ds_split.F$class<-ifelse(my_ds_split.F$class==1,0,1)
  res<-rbind(res,cbind(my_ds_split.F))
}
res<-as.data.frame(res)

# Plot the results
plots <- list()
for (g in 1:length(areas)) {
  my_ds_split_class<-res[res$ID==areas[g],]
plots[[g]] <- ggplot() +
  geom_point(data=my_ds_split_class, 
  aes(x=x, y=y, color=class)) +
  theme_void()
} 
plots[[1]]

plots[[2]] 

在地块中,区域g2的class化与g3相反,只进行一次class化g2g3数据集在一起不是一个选项,因为我是我的原始数据集我有9万个区域而我的RAM内存只有64GB。

请帮我找到在几个地区之间就class化达成相同协议的方法吗?

有窍门!您需要始终从数据集的较高值或较低值开始,只需在分类之后放入和删除然后效果很好,在这种情况下使用变量 R:[=12= 中的较低值]

library(dplyr)
  my_ds_split<-my_ds[my_ds$ID==areas[i],]
  min.start.value <- my_ds_split %>% 
    slice(which.min(R))
  my_ds_split <- rbind(min.start.value,my_ds_split)
  k.medoids.res<-cluster::clara(my_ds_split[,4:ncol(my_ds_split)], 2, metric ="manhattan")
  my_ds_split.F<-cbind(my_ds_split, class = k.medoids.res$clustering)
  my_ds_split.F<-my_ds_split.F[-c(1),]