R语言;k-means聚类

求问,如何使用R语言对excle里面的数据进行k-means聚类,从选择K(手肘法)的值到最后聚成哪几类
其中,excle里面的数值是四组定序变量

该回答引用ChatGPT

要使用R语言对Excel中的数据进行k-means聚类,您可以使用以下步骤:

将Excel中的数据导入R中。您可以使用read_excel()函数从Excel文件中读取数据并将其存储为数据框。
例如,如果您的Excel文件名为“data.xlsx”,您可以使用以下代码将数据读入R中:

library(readxl)
my_data <- read_excel("data.xlsx")

确定最佳的聚类数量K。您可以使用“手肘法”(elbow method)来确定最佳的聚类数量K。手肘法涉及绘制聚类数量K和聚类结果的误差平方和(SSE)之间的关系图,并查找SSE开始急剧下降的K值。在这个点之后,添加更多的聚类数量不会显著减少SSE。
以下是使用“手肘法”来确定最佳聚类数量K的示例代码:



# 定义函数来计算SSE
calculate_sse <- function(data, centers, cluster){
  sapply(1:nrow(data), function(i) sum((data[i,] - centers[cluster[i],])^2))
}

# 设置K的范围并计算SSE
k_values <- 1:10
sse_values <- sapply(k_values, function(k){
  kmeans(my_data, centers = k)$tot.withinss
})

# 绘制SSEK的关系图
plot(k_values, sse_values, type = "b", pch = 19, frame = FALSE, xlab = "K", ylab = "SSE")

# 从图中找到手肘点
elbow_point <- 3  # 在这个例子中,手肘点是K=3


在上面的代码中,我们首先定义了一个函数calculate_sse(),该函数用于计算数据点和聚类中心之间的SSE。接下来,我们设置了K的范围并计算了每个K值的SSE。然后,我们绘制了K和SSE之间的关系图,并找到了手肘点。

进行k-means聚类并确定最终聚类数。使用kmeans()函数进行聚类。将聚类数量设置为您在步骤2中找到的手肘点。聚类结果将存储在一个列表中,其中包括分配给每个数据点的聚类标签和聚类中心。
以下是对数据进行k-means聚类并确定最终聚类数的示例代码:


# 进行k-means聚类
k <- elbow_point
kmeans_result <- kmeans(my_data, centers = k)

# 输出聚类结果
kmeans_result

# 可视化聚类结果
library(ggplot2)
ggplot(data = my_data, aes(x = V1, y = V2, color = as.factor(kmeans_result$cluster))) +
  geom_point() +
  scale_color_discrete(name = "Cluster")