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

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 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗