[英]k-medoids: control same agreement on class label
我对两个 class 标签(1 和 2)的模式的控制存在问题,导致使用 k-medoids 进行分类任务。 我想将cluster::clara
应用于两个区域( ID
) g2
和g3
以及两个区域的相同分类 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]]
plots[[2]]
在图中,区域g2
的分类与g3
的分类相反,并且只使用g2
和g3
数据集进行一个分类不是一种选择,因为我是我的原始数据集,我有 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.