gpt4 book ai didi

r - 从主成分的 K 均值中提取有用信息

转载 作者:行者123 更新时间:2023-12-02 08:40:30 25 4
gpt4 key购买 nike

我正在处理一个相对较大的数据集(仅使用大约 1/32,但该子集约为 50000x9000)。为了对此进行分析,我采取了几个步骤来降低维度,以便我可以应用某种聚类算法。

看一下下面的数据框:

set.seed(340)
df = data.frame(replicate(10,sample(0:10,size = 10,replace = TRUE)))
> df
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 4 9 4 6 9 4 2 5 8 8
2 5 8 2 0 4 6 1 1 0 10
3 1 7 6 3 5 9 6 0 7 1
4 0 6 8 6 6 0 5 5 10 10
5 2 0 5 8 2 10 8 2 1 5
6 3 9 10 2 8 5 2 10 3 10
7 9 0 1 0 6 8 9 6 5 0
8 5 6 9 3 10 4 4 8 6 9
9 8 7 6 2 10 9 9 7 1 10
10 0 7 2 6 1 6 3 2 3 9

每一行代表一个人,每个变量表示该人表现出这种品质的频率。假设我使用 princomp() 对此执行主成分分析,并收集前四个 pc 用于 k 均值。

pc = princomp(df)
new_df = cbind(pc$loadings[,1],pc$loading[,2],pc$loadings[,3],pc$loadings[,4])
fit = kmeans(new_df,2)

据此,我可以推断出哪个簇表现出哪些主成分的高值,我可以使用载荷来查看每个主成分的一般衡量标准。然而,我想最终将这些信息连接到我的原始数据集。有没有一种方法可以将原始数据中的每个人聚类到根据主成分分析的 k 均值创建的聚类中?或者我误解了PCA的概念。

最佳答案

pc$loadings 查找输入变量的坐标,而不是个体的坐标。因此,kmeans(new_df,2) 对变量而不是个体进行分类。为了确保这一点,请尝试使用 10x5 data.frame 而不是 10x10 data.frame 来编写代码:您只能获得 5 个簇坐标:

df = data.frame(replicate(5,sample(0:10,size = 10,replace = TRUE)))
pc = princomp(df)
new_df = cbind(pc$loadings[,1],pc$loading[,2],pc$loadings[,3],pc$loadings[,4])
fit = kmeans(new_df,2)
fit$cluster
X1 X2 X3 X4 X5
2 2 1 2 2

如果这就是您想要做的,那么您只需rbind fit$cluster到您的原始data.frame,您将拥有变量的集群。

df <- rbind(df,fit$cluster)

但是,如果您打算对个体(即原始 data.frame 的行)进行聚类,则需要对主成分分析生成的行坐标执行聚类。我不知道如何访问 princomp 中的内容,但其他 pca 方法可以轻松实现这一点。 FactoMineR::PCA 输出一个包含行坐标 ($ind$coord) 和列坐标 ($var$coord) 的列表。

library(FactoMineR)
pf <- PCA(df,graph=FALSE)

fit <- kmeans(pf$ind$coord[,1:4],2)

fit$cluster
1 2 3 4 5 6 7 8 9 10
1 2 1 1 1 2 1 1 1 2

要将它们添加到原始 data.frame 中:

df$cluster <- fit$cluster

关于r - 从主成分的 K 均值中提取有用信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com