【问题标题】:How to perform k-mean clustering in R如何在 R 中执行 k-mean 聚类
【发布时间】:2021-12-13 23:15:33
【问题描述】:

我正在尝试探索creditcard fraud dataset 来学习 R 和 k-means 聚类。但是我在获得最佳集群数量时遇到了一个问题。不幸的是,关于该错误甚至如何在 R 中执行 kmeans 聚类的发现都不是谷歌。我想知道警告是什么?为什么结果只显示 1 个集群?提前致谢!

代码:

data = read.csv("creditcard.csv")
scaled_data <- scale(data )
wss <- (nrow(scaled_data)-1)*sum(apply(scaled_data,2,var))
for (i in 2:100) wss[i] <- sum(kmeans(scaled_data, centers=i)$withiness)
plot(1:100, wss, type='b', xlab="Clusters", ylab="WSS")

警告:

Warning messages:
1: Quick-TRANSfer stage steps exceeded maximum (= 14240350) 
2: did not converge in 10 iterations 
3: Quick-TRANSfer stage steps exceeded maximum (= 14240350) 
4: did not converge in 10 iterations 

【问题讨论】:

  • 这不是错误,而是警告。正如它所说,在 10 次迭代后没有达到收敛。要么允许更多迭代,要么降低收敛阈值。

标签: r cluster-analysis k-means data-mining credit-card


【解决方案1】:

您的代码有几个问题。让我们使用 R 上可用的示例数据集来完成它,因为您没有提供可重现的数据:

data(iris)
scaled_iris <- scale(iris[, -5])

由于数据已被缩放,所有的方差都是 1,所以这就是您计算总数所需的全部内容:

wss <- sum(colSums(scaled_iris^2))
wss
# [1] 596

现在是集群。我将包含@mhovd 提到的参数及其默认值(没有收敛的参数)。如果您收到警告,则将 iter.max= 增加到 15 或 20 或更多。这并不能保证任何数量的组的结果都是最佳的。要增加发生这种情况的机会,您应该使用 nstart= 参数并将值设置为 5 或更大:

for (i in 2:100) wss[i] <- kmeans(scaled_iris, centers=i, iter.max=10)$tot.withinss
head(wss);tail(wss)
# [1] 596.00000 220.87929 138.88836 113.97017 104.98669  81.03783
# [1] 3.188483 2.688470 2.716485 2.535701 2.497792 2.116150
plot(wss, type='b', xlab="Clusters", ylab="WSS")

请注意,您拼错了withinss,并且您没有意识到kmeans 将它们的总和返回为tot.withinss。阅读手册页?kmeans 总是好的。请注意,您不需要 1:100,因为如果您只提供一个向量,绘图函数将自动提供连续整数。

【讨论】:

  • 我已经更新了上面的代码。我还有一个问题是关于用 kmeans 评估预测。通过使用“confusionMatrix”,我看到另一个错误 - “数据和参考应该是具有相同水平的因素”。我错过了什么?
  • 这不是您的代码的更新。这是一个完全不同的问题,涉及至少两个您无法识别的包(?线索和插入符号?)。你。应该为此提出一个新问题。由于您没有提供原始数据(或其中的样本),因此如果您使用iris 数据集来说明您的问题会更有帮助。
猜你喜欢
  • 2018-08-12
  • 2016-11-23
  • 2017-06-30
  • 1970-01-01
  • 2017-09-12
  • 2013-03-23
  • 2015-07-29
  • 2017-07-17
  • 1970-01-01
相关资源
最近更新 更多