m0_73353883 2023-03-03 10:05 采纳率: 87.5%
浏览 177
已结题

R语言;kmeans聚类

求问,用R语言做k-means聚类
现有条件:excle表格里面包括四个变量,变量按列排布
要求:首先用手肘法和轮廓系数法求最佳K值,给出相应理论依据以及可视化图
然后用R语言进行聚类,每个类分别怎么样,即每个自变量是什么值,以及可视化图如何解释
最后画出一个包含所有样本点并聚好类的图

代码一定要详细

  • 写回答

8条回答 默认 最新

  • 极客智能体-在线 2023-03-03 15:55
    关注

    以下答案由GPT-3.5大模型与博主波罗歌共同编写:
    以下是实现k-means聚类的步骤以及代码:

    Step 1: 读入数据到 R 语言

    利用 readxl 包读取 Excel 文件里面的数据

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

    Step 2: 肘部图找出最佳 k 值

    k-means 聚类是需要指定聚类数量 k 的,所以要选择一个最佳的 k 值,常用的方法是肘部图法,即绘制不同 k 值时,聚类的误差平方和 SSE 的变化情况,如下所示:

    image.png

    可以看到,当 k=3 时,SSE 的下降速度变缓,之后每增加一个类别, SSE 的下降就变得越来越缓,我们可以认为 k=3 是一个比较合适的值

    代码如下:

    library(ggplot2)
    library(gridExtra)
    
    sses <- c()
    for (k in 1:10) {
      km <- kmeans(data, k)
      sses[k] <- km$tot.withinss
    }
    df <- data.frame(k = 1:10, SSE = sses)
    
    # 绘制肘部图
    p1 <- ggplot(df, aes(x = k, y = SSE)) +
      geom_line() +
      geom_point(size = 2, color = "red") +
      scale_x_continuous(breaks = 1:10) +
      labs(title="SSE 肘部图", x = "k", y = "SSE")
    
    p1
    

    Step 3: 进行聚类

    根据上面的结果,我们确定 k=3 进行聚类

    set.seed(123)
    k = 3 # 聚类数目
    km.res <- kmeans(data, k) # 进行 k-means 聚类
    
    # 将聚类结果合并到数据集里面
    data$cluster <- as.factor(km.res$cluster)  
    

    Step 4: 可视化聚类结果

    我们采用散点图的方式来展示聚类结果,其中横轴和纵轴分别表示数据集中的四个变量,不同颜色的点代表不同的类别

    library(ggplot2)
    library(gridExtra)
    
    vars <- colnames(data[,1:4])
    p2 <- list()
    for(i in 1:length(vars)) {
      for(j in (i+1):length(vars)) {
        # 绘制散点图,每个类别分别用不同颜色表示
        p2[[length(p2)+1]] <- ggplot(data, 
                                    aes_string(vars[i], vars[j], color = "cluster")) + 
          geom_point(size = 3) + 
          labs(x = vars[i], y = vars[j], color = "cluster") +
          ggtitle(vars[i]~"vs"~vars[j])
      }
    }
    
    # 显示多个图像
    grid.arrange(grobs=p2, ncol = 3)
    

    综合代码如下:
    如果我的回答解决了您的问题,请采纳!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 赞助了问题酬金15元 3月3日
  • 修改了问题 3月3日
  • 展开全部

悬赏问题

  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 pyqt5读取ui文件报错
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?