如何解释 R kmeans 函数的结果?
Posted
技术标签:
【中文标题】如何解释 R kmeans 函数的结果?【英文标题】:How can I interpret the results of R kmeans function? 【发布时间】:2016-01-11 09:05:41 【问题描述】:我有一大组数据,其中包含 81432 幅图像的描述。这些描述是由一个图像描述符生成的,该描述符生成一个具有 127 个位置的向量(对于每个图像)。所以,我有一个 81432 行 127 列的矩阵。
我正在从 R 运行 kmeans,但我只是不知道如何解释结果。我已经设置了一些集群,算法运行了,那又怎样?我想绘制肘部规则,但我什至不知道该怎么做。
【问题讨论】:
请阅读how to create a reproducible example。包括一些样本数据,并准确描述您希望您的情节是什么样的。如果您只是在寻找可视化建议,那么这真的不是一个编程问题,可能更适合 Cross Validated 而不是 Stack Overflow。 感谢@MrFlick 的解释。实际上,我真的不知道我在寻找什么样的可视化(可能类似于散点图)。我也把这个问题放在了 Cross Validated 上。 【参考方案1】:使用 Kmeans 和主成分分析分析和可视化数据集的示例代码 sn-p:
library(calibrate)
library(plyr)
library(gclus)
library(scatterplot3d)
library(cluster)
library(fpc)
library(mclust)
library(rpanel)
library(rgl)
library(lattice)
library(tm);
library(RColorBrewer)
#Read data
mydata <- read.table(file="c:/data.mtx", header=TRUE, row.names=1, sep="");
# Lets look at the correlations
mydata.cor = abs(cor(scale(mydata)))
mydata.cor[,1:2]
#lets look at the data in interactive 3D plot before PCA
rp.plot3d(mydata[,1],mydata[,2], mydata[,3])
# Doing the PCA
mydata.pca<- prcomp(mydata, retx=TRUE, center=TRUE, scale=TRUE);
summary(mydata.pca)
#3D plot of first three PCs
rp.plot3d(mydata.pca$x[,1],mydata.pca$x[,2],mydata.pca$x[,3])
#Eigenvalues of components for Kaiser Criterion
mydata.pca$sdev ^2
#scree test for determining optimal number of PCs (Elbow rule)
par(mfrow=c(1,2))
screeplot(mydata.pca,main="Scree Plot",xlab="Components")
screeplot(mydata.pca,type="line",main="Scree Plot")
#Scores
scores = mydata.pca$x
## Plot of the scores, with the axes
pdf("scores.pdf")
plot (scores[,1], scores[,2], xlab="Scores 1", ylab="Scores 2")
text (x=scores[,1], y=scores[,2], labels=row.names (scores), cex=c(0.4,0.4), col = "blue")
lines(c(-5,5),c(0,0),lty=2) ## Draw the horizontal axis
lines(c(0,0),c(-4,3),lty=2) ## Draw the vertical axis
dev.off()
#finding possible number of clusters in Kmeans
wss <- (nrow(scale(mydata))-1)*sum(apply(scale(mydata),2,var));
for (i in 2:20) wss[i] <- sum(kmeans(scale(mydata),centers=i)$withinss);
plot(1:20, wss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares");
#Performing K-Means and visualizing the result
km1<-kmeans(scores[,1:2], algorithm = "Hartigan-Wong", centers=4)
#par(mfrow = c(1, 1))
pdf("km.pdf")
plot(scores[,1:2], col = km1$cluster);
points(km1$centers, col = 1:5, pch = 8, cex=2);
scatterplot3d(km1$centers, pch=20, highlight.3d = TRUE, type="h");
# getting cluster means
aggregate(scores[,1:2],by=list(km1$cluster),FUN=mean);
# appending cluster assignment
clustercounts <- data.frame(scores[,1:2], km1$cluster);
#Cluster Plot against 1st 2 principal components
clusplot(scores[,1:2], km1$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, cex=c(0.2,0.2));
dev.off()
【讨论】:
这个答案没有帮助,因为我们大多数人可能没有"c:/data.mtx"
坐在我们的机器上
@SeñorO 这个问题没有帮助,因为它不包含可重复的数据集
@C8H10N4O2 好的,你想让我怎么做?
@C8H10N4O2 所以你要求人们否决我的问题,只是因为我没有提供可重复的数据集?我怎样才能在这里给你一个 20MB 的文件?
@VictorLeal 如果您要让人们完成回答您问题的工作,请完成制作能代表您的问题的最佳可重复数据集的工作。很多时候,只要这样做,你就会比得到答案学到的更多(我说的是个人经验)【参考方案2】:
要绘制肘部规则(关于点与其质心的距离),我们必须使用tot.withinss
(簇内总平方和)。
这个答案是关于 R 的使用。
【讨论】:
以上是关于如何解释 R kmeans 函数的结果?的主要内容,如果未能解决你的问题,请参考以下文章
R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释多个iris数据样本的预测结果使用LIME解释器进行模型预测结果解释
R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释一个iris数据样本的预测结果LIME解释器进行模型预测结果解释并可视化
R语言进行主成分分析(PCA):使用prcomp函数来做主成分分析使用summary函数查看主成分分析的结果计算每个主成分解释方差的每个主成分解释的方差的比例以及多个主成分累积解释的方差比例