r-找到理想的聚类



因此,我和其他一些同事开发了一种分层聚类算法,基本上可以根据特定城市(如伦敦市(找到涉及农业产业的主要集群。。我们在R中构造了这个算法。它运行得很好。因此,根据我们在算法中插入的过滤器,我们能够生成6个伦敦城市的聚类场景。例如,第一个场景生成2个集群,第二个场景生成5个集群,依此类推。因此,我希望得到一些关于如何选择最合适的集群的帮助。我看到有一些包在这个过程中有帮助,比如pvclust,但我无法将其用于我的案例。我在下面插入一个简短的可执行代码来展示我想要的东西的本质。

欢迎任何帮助!如果你知道如何使用另一个包,请随意描述。

谨致问候。

library(rdist)
library(geosphere)
library(fpc)


df<-structure(list(Industries = c(1,2,3,4,5,6), 
+                    Latitude = c(-23.8, -23.8, -23.9, -23.7, -23.7,-23.7), 
+                    Longitude = c(-49.5, -49.6, -49.7, -49.8, -49.6,-49.9), 
+                    Waste = c(526, 350, 526, 469, 534, 346)), class = "data.frame", row.names = c(NA, -6L))

df1<-df

#clusters
coordinates<-df[c("Latitude","Longitude")]
d<-as.dist(distm(coordinates[,2:1]))
fit.average<-hclust(d,method="average") 

clusters<-cutree(fit.average, k=2) 
df$cluster <- clusters 
> df
Industries Latitude Longitude Waste cluster
1          1    -23.8     -49.5   526       1
2          2    -23.8     -49.6   350       1
3          3    -23.9     -49.7   526       1
4          4    -23.7     -49.8   469       2
5          5    -23.7     -49.6   534       1
6          6    -23.7     -49.9   346       2
> 
clusters1<-cutree(fit.average, k=5) 
df1$cluster <- clusters1
> df1
Industries Latitude Longitude Waste cluster
1          1    -23.8     -49.5   526       1
2          2    -23.8     -49.6   350       1
3          3    -23.9     -49.7   526       2
4          4    -23.7     -49.8   469       3
5          5    -23.7     -49.6   534       4
6          6    -23.7     -49.9   346       5
> 

也许可以尝试这样的方法(注意,我不确定这种方法的数学严谨性(:

library(tidyverse)
library(geosphere)

clustered_df <- 
df %>%
arrange(Latitude, Longitude) %>%
mutate(
dist_diff = c(0, geosphere::distVincentyEllipsoid(cbind(.$Latitude, .$Longitude))),
separate_clust = dist_diff > median(dist_diff[-1]),
cluster_no = 1 + cumsum(separate_clust)
) %>% 
select(Industries, Longitude, Latitude, Waste, cluster_no))
library(leaflet)
leaflet(clustered_df) %>% 
addTiles() %>%
addAwesomeMarkers(lat=~Latitude, lng = ~Longitude, label=~as.character(cluster_no)) 

相关内容

  • 没有找到相关文章

最新更新