【发布时间】:2019-12-27 15:10:35
【问题描述】:
我在Heart Disease UCI 数据集上运行 R 中的 Kmeans 算法。我应该得到 2 个大小为 138 165 的集群,每个集群都像数据集中的那样。
步骤:
- 将数据集存储在数据框中:
df <- read.csv(".../heart.csv",fileEncoding = "UTF-8-BOM")
- 提取特征:
features = subset(df, select = -target)
- 规范化它:
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x)))
}
features = data.frame(sapply(features, normalize))
- 运行算法:
set.seed(0)
cluster = kmeans(features, 2)
cluster$size
输出:
[1] 99 204
为什么?
【问题讨论】:
-
您没有获得相同的集群可能有多种原因。例如,您的
set.seed在您当前的迭代和之前的迭代之间可能不同。此外,以不同的方式对数据进行排序会影响如何“挑选”基于种子的起点(因为没有更好的术语)。 -
除了更换种子,我还能做些什么来获得更好的结果?我应该为
kmeans函数指定nstart吗? -
您应该考虑一些事项。尝试多个种子(我尝试了多达 20 个)。尝试多个
nstarts。使用两者的组合。我知道这不是一个简单的解决方案。另外,数据有变化吗?你有原始结果吗?通过将新运行与原始结果进行比较,您可能能够接近原始结果。 -
数据是不变的。我只是在导入和规范化它。它在“目标”列中有原始结果,那么我怎样才能接近?