无法在R中复制扩展以进行群集

时间:2017-09-23 19:56:20

标签: r machine-learning cluster-analysis k-means scaling

我在R中理解和复制 scale 函数时遇到问题。我知道它提出了z标准化(当所有参数都是默认值时),但是我很难获得完全相同的缩放值对于执行群集后的特定群集。这是一个例子:

让我们定义一个数据集:

set.seed(16)
nc=10
nr=10000
df1 = data.frame(matrix(sample(1:50, size=nr*nc,replace = T), ncol=nc, nrow=nr))
head(df1, n=4)

在群集之前,我需要扩展数据:

for_clst_km = scale(df1) #standardization with z-scores
Clusters <- kmeans(for_clst_km, 6, iter.max = 100000, nstart = 5)

执行群集后,我可以获得群集3的缩放值:

ver1=for_clst_km[Clusters$cluster==3,]

我现在想要使用原始数据集 df1 中的数据复制 ver1

cluster3 = df1[Clusters$cluster==3,]
cluster3$cluster = NULL

for_clst_means = apply(df1,2,mean)
for_clst_sd = apply(df1,2,sd)

ver2 = (sweep(cluster3, 2, for_clst_means))/for_clst_sd

ver3 = apply(cluster3, 2, function(x) ((x-for_clst_means)/for_clst_sd))

最后,当比较这三个版本时,我发现它们是不同的。

all(ver1 == ver2)
[1] FALSE

all(ver1 == ver3)
[1] FALSE

为什么?我如何获得 ver2 ver3 ver1 完全相同。谢谢!

0 个答案:

没有答案