• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      未分类

      • 首页
      • 博客
      • 未分类
      • R代码|K均值算法R语言代码

      R代码|K均值算法R语言代码

      • 发布者 weinfoadmin
      • 分类 未分类
      • 日期 2021年9月9日
      • 评论 0评论

      专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。

      前言:

      我根据自己的科研方向和实际工作,在利用R语言解决数据,特征和模型三方面的问题时,会搜集,阅读,修改和迁移一些R代码,利用【R语言】公众号将其整理和归总,分享给大家。一方面,希望这些R代码能够对大家解决实际问题有帮助或者启示;另一方面,也希望大家尝试从R代码中学习和应用R语言。我只是R语言代码的搬运工和传播者,大家在使用这些R代码的时候,有些什么新的启示或者问题,请留言。依托【R语言】公众号,我创建了R语言群,群友们每天都会就R语言的主题进行交流和分享。需要加入R语言群的朋友,可以扫码加我的个人微信,请备注【姓名-入群】。我诚邀你加入群,大家相互学习和共同进步。


      代码:

      最近在研究客群细分的问题,使用到了经典的聚类学习算法,K均值算法。

      K均值算法的R语言代码

      ##########################
      #时间:2020-07-08
      #########################
      # 加载R包
      library(tidyverse)  # data manipulation
      library(cluster)    # clustering algorithms
      library(factoextra) # clustering algorithms & visualization

      # 数据准备
      df <- USArrests
      # 数据缺失值处理
      df <- na.omit(df) # 删除含有缺失值的样本

      # 数据标准化处理
      df <- scale(df)
      head(df)

      # 基于距离度量的聚类学习
      distance <- get_dist(df)
      fviz_dist(distance, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))

      # K均值算法
      k2 <- kmeans(df, centers = 2, nstart = 25)
      str(k2)
      k2
      fviz_cluster(k2, data = df)
      df %>%
        as_tibble() %>%
        mutate(cluster = k2$cluster,
               state = row.names(USArrests)) %>%
        ggplot(aes(UrbanPop, Murder, color = factor(cluster), label = state)) +
        geom_text()
      # 不同的聚类数目对比分析
      k3 <- kmeans(df, centers = 3, nstart = 25)
      k4 <- kmeans(df, centers = 4, nstart = 25)
      k5 <- kmeans(df, centers = 5, nstart = 25)

      # plots to compare
      p1 <- fviz_cluster(k2, geom = "point", data = df) + ggtitle("k = 2")
      p2 <- fviz_cluster(k3, geom = "point",  data = df) + ggtitle("k = 3")
      p3 <- fviz_cluster(k4, geom = "point",  data = df) + ggtitle("k = 4")
      p4 <- fviz_cluster(k5, geom = "point",  data = df) + ggtitle("k = 5")

      library(gridExtra)
      grid.arrange(p1, p2, p3, p4, nrow = 2)

      # 最佳的K数量确定
      # 方法1 Elbow Method
      set.seed(123)

      # function to compute total within-cluster sum of square 
      wss <- function(k) {
        kmeans(df, k, nstart = 10 )$tot.withinss
      }

      # Compute and plot wss for k = 1 to k = 15
      k.values <- 1:15

      # extract wss for 2-15 clusters
      wss_values <- map_dbl(k.values, wss)

      plot(k.values, wss_values,
           type="b", pch = 19, frame = FALSE, 
           xlab="Number of clusters K",
           ylab="Total within-clusters sum of squares")

      set.seed(123)
      fviz_nbclust(df, kmeans, method = "wss")

      # 方法2 Average Silhouette Method
      # function to compute average silhouette for k clusters
      avg_sil <- function(k) {
        km.res <- kmeans(df, centers = k, nstart = 25)
        ss <- silhouette(km.res$cluster, dist(df))
        mean(ss[, 3])
      }

      # Compute and plot wss for k = 2 to k = 15
      k.values <- 2:15

      # extract avg silhouette for 2-15 clusters
      avg_sil_values <- map_dbl(k.values, avg_sil)

      plot(k.values, avg_sil_values,
           type = "b", pch = 19, frame = FALSE, 
           xlab = "Number of clusters K",
           ylab = "Average Silhouettes")

      fviz_nbclust(df, kmeans, method = "silhouette")

      # 方法3:Gap Statistic Method
      # compute gap statistic
      set.seed(123)
      gap_stat <- clusGap(df, FUN = kmeans, nstart = 25,
                          K.max = 10, B = 50)
      # Print the result
      print(gap_stat, method = "firstmax")
      fviz_gap_stat(gap_stat)

      # 选择最佳K值后重新实施K均值算法
      # Compute k-means clustering with k = 4
      set.seed(123)
      final <- kmeans(df, 4, nstart = 25)
      print(final)
      # 聚类学习的可视化效果
      fviz_cluster(final, data = df)
      # 聚类的中心点表示
      USArrests %>%
        mutate(Cluster = final$cluster) %>%
        group_by(Cluster) %>%
        summarise_all("mean")

      # 参考资料:
      # https://uc-r.github.io/kmeans_clustering

      最佳K=4后,重新执行K均值算法,可视化效果如下图所示。

      各个聚类的中心点坐标结果。

      关于这段代码有什么问题或者想法,请阅读参考资料,或者添加我的微信,大家交流和讨论。

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      R书籍|Introduction to Statistics and Data Analysis
      2021年9月9日

      下一篇文章

      R书籍|R for Data Analysis in easy steps
      2021年9月9日

      你可能也喜欢

      2-1675088548
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      30 1月, 2023
      9-1675131201
      如何快速批量修改 Git 提交记录中的用户信息
      26 1月, 2023
      8-1678501786
      肿瘤细胞通过改变CD8+ T细胞中的丙酮酸利用和琥珀酸信号来调控抗肿瘤免疫应答。
      7 12月, 2022

      留言 取消回复

      要发表评论,您必须先登录。

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?