繁体   English   中英

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

[英]k-medoids: control same agreement on class label

我对两个 class 标签(1 和 2)的模式的控制存在问题,导致使用 k-medoids 进行分类任务。 我想将cluster::clara应用于两个区域( IDg2g3以及两个区域的相同分类 label ,在我的示例中:

# 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]]

p1

plots[[2]] 

p2

在图中,区域g2的分类与g3的分类相反,并且只使用g2g3数据集进行一个分类不是一种选择,因为我是我的原始数据集,我有 9 万个区域和我的 RAM memory只有64GB。

请帮助我找到任何方法来在多个区域之间创建相同的分类协议?

有一个技巧,您需要始终从数据集的较高或较低值开始,只需在分类后放置和删除,效果很好,在这种情况下,使用变量R中的较低值:

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),]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM