如何表示一个点属于一个簇的概率?

机器算法验证 聚类 数据可视化 散点图
2022-04-06 01:18:29

我想用二维数据集做一个散点图。假设我只有 3 个集群。然后,我可以为每个集群分配以下颜色:红色、绿色和蓝色。如果进行了软分配,那么每个数据点将有一定的概率属于每个集群。可以清楚地在散点图中用的 RGB 值绘制每个点,其中是该点属于集群的概率。[p1,p2,p3]pii

这适用于 2 或 3 节课。但是如果我有超过 3 个呢?有没有办法以直观的方式表示这些概率,保留每个样本在 2D 空间中的位置?如果提供任何有用的信息,我正在使用 R 进行绘图。

2个回答

一般来说,这是一个具有挑战性的问题,特别是考虑到二维空间中的相对位置应该被保留的约束。

在没有该约束的情况下,我建议使用堆积条形图。使用细条和排序的数据集,颜色可以很容易地用于指示相当多的点属于不同集群的概率。像这样的图在群体遗传学中很常见,并且可以传达大量有用的信息,例如在这个例子中。

如果我们要坚持在二维中保留相对位置的约束,我可以想到一种解决方案,该解决方案适用于具有少量集群的中等大小的数据集。对于这些情况,您可以将每个点绘制成一个小饼图;饼图的各个部分表示属于每个集群的概率。

这是一个使用 3 个集群的工作示例

# Loading required libraries
library(e1071)
library(ggplot2)
library(scatterpie)

# Generating data frame
dat <- data.frame(a = c(rnorm(50, mean = 10, sd = 3), 
                        rnorm(50, mean = 20, sd = 3),
                        rnorm(50, mean = 30, sd = 3)),
                  b = c(rnorm(50, mean = 10, sd = 5), 
                        rnorm(50, mean = 20, sd = 3),
                        rnorm(50, mean = 30, sd = 3)))

# Identifying clusters and calculating cluster probabilities using 
#  fuzzy c-means clustering
clustdat <- cmeans(dat, centers = 3)

# Adding cluster information to dataset
dat$clusters <- as.factor(clustdat$cluster)
dat$A <- clustdat$membership[,1]
dat$B <- clustdat$membership[,2]
dat$C <- clustdat$membership[,3]

# Plotting
ggplot() + geom_scatterpie(aes(a, b, group = clusters), 
                           data = dat, cols = LETTERS[1:3])

在此处输入图像描述 请注意,通过将其与某种降维技术(用于绘图 - 聚类可以在多维空间中完成)相结合,这对于 >2 维也可能有用。

也许您不需要对分布进行精确编码。

为“混合”定义颜色,例如灰色。

和第二大概率之间的差异在您的集群调色板和灰色之间进行插值。pmax