聚类分析R语言_k均值聚类算法计算题

聚类分析R语言_k均值聚类算法计算题今天给大家展示基于R语言的聚类,在此之前呢,首先谈谈聚类分析,以及常见的聚类模型,说起聚类我们都知道,就是按照一定的相似性度量方式,把接近的一些个体聚在一起。这里主要是相似性度量,不同的数据类型,我们需要用不同的度量方式。除此之外,聚类的思想也很重要,要是按照聚类思想来说,主要有这么几大类,第一大类是基于分割的聚类,比如k-means,以及按照这个思路进行了简单扩展的几个聚类,如k-median等。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

今天给大家展示基于R语言的聚类,在此之前呢,首先谈谈聚类分析,以及常见的聚类模型,说起聚类我们都知道,就是按照一定的相似性度量方式,把接近的一些个体聚在一起。这里主要是相似性度量,不同的数据类型,我们需要用不同的度量方式。除此之外,聚类的思想也很重要,要是按照聚类思想来说,主要有这么几大类,第一大类是基于分割的聚类,比如k-means,以及按照这个思路进行了简单扩展的几个聚类,如k-median等。第二大类呢,就是层次聚类,它其实是把个体之间的关系进行了一个层次展示,具体聚为几类,由人为进行设定。第三大类呢,就是基于密度的聚类,这里不要讲基于密度的聚类和基于概率密度分布的聚类相混淆,这其实是一样的,比如混合模型,就是基于概率分布的聚类,而DBSCAN就是基于密度的聚类,实际上,这里密度是指一指局部密度,而不是概率密度分布。那么第四大类呢,就是基于概率密度分布的聚类,这一类聚类方法主要是假设数据来自某个概率分布,或者是某几个概率分布的组合,进而进行参数估计,确定分布的样子,再反过来看看,样本点属于哪一类。那么第五大类呢,是矩阵的分解(Nonnegative Matrix Factorizations ),这一大类其实和之前的几类明显不同,比如SVD分解,或者其他的分解其实在文本挖掘或者推荐算法里边都属于聚类。最后一大类就是谱聚类了。下面我们用R语言进行一下计算。

#要是没有这个包的话,首先需要安装一下
#install.packages("factoextra")
#载入包
library(factoextra)
# 载入数据
data("USArrests") 
# 数据进行标准化
df <- scale(USArrests) 
# 查看数据的前五行
head(df, n = 5)
               Murder   Assault   UrbanPop         Rape
Alabama    1.24256408 0.7828393 -0.5209066 -0.003416473
Alaska     0.50786248 1.1068225 -1.2117642  2.484202941
Arizona    0.07163341 1.4788032  0.9989801  1.042878388
Arkansas   0.23234938 0.2308680 -1.0735927 -0.184916602
California 0.27826823 1.2628144  1.7589234  2.067820292
#确定最佳聚类数目
fviz_nbclust(df, kmeans, method = "wss") + geom_vline(xintercept = 4, linetype = 2)

Jetbrains全家桶1年46,售后保障稳定

最佳聚类数目

#可以发现聚为四类最合适,当然这个没有绝对的,从指标上看,选择坡度变化不明显的点最为最佳聚类数目。
#设置随机数种子,保证实验的可重复进行
set.seed(123)
#利用k-mean是进行聚类
km_result <- kmeans(df, 4, nstart = 24)
#查看聚类的一些结果
print(km_result)
#提取类标签并且与原始数据进行合并
dd <- cbind(USArrests, cluster = km.res$cluster)
head(dd)
           Murder Assault UrbanPop Rape cluster
Alabama      13.2     236       58 21.2       4
Alaska       10.0     263       48 44.5       3
Arizona       8.1     294       80 31.0       3
Arkansas      8.8     190       50 19.5       4
California    9.0     276       91 40.6       3
Colorado      7.9     204       78 38.7       3

#查看每一类的数目
table(dd$cluster)
 1  2  3  4 
13 16 13  8 
#进行可视化展示
fviz_cluster(km_result, data = df,
             palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
             ellipse.type = "euclid",
             star.plot = TRUE, 
             repel = TRUE,
             ggtheme = theme_minimal()
)

结果如下:
聚类效果图
一般来说,能够对数据聚类后进行可视化展示的也就是二维,三维数据,如果维度很高的话,一种方法是t-SNE方法,这种方法是按照流型的方法进行可视化,用的比较多。另一种的话,就是利用降维方法,比如主成分分析等,进行降维后可视化展示。

下面我们进行层次聚类

#先求样本之间两两相似性
result <- dist(df, method = "euclidean") #产生层次结构 result_hc <- hclust(d = result, method = "ward.D2") #进行初步展示 fviz_dend(result_hc, cex = 0.6)

结果如下:
层次结构图

根据这个图,我们可以方便的确定聚为几类比较合适,比如我们聚为四类,并且进行可视化展示

fviz_dend(result_hc, k = 4, 
          cex = 0.5, 
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE, 
          rect = TRUE          
)

效果如下:
层次聚类效果图

好,今天就到这,明天继续展示其它几类聚类方法,以及图的制作。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213274.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • caioj 1079 动态规划入门(非常规DP3:钓鱼)(动规中的坑)「建议收藏」

    caioj 1079 动态规划入门(非常规DP3:钓鱼)(动规中的坑)「建议收藏」caioj 1079 动态规划入门(非常规DP3:钓鱼)(动规中的坑)

    2022年4月20日
    42
  • YouTube为什么打不开?以及简便的訪问的方法/解决方式!

    YouTube为什么打不开?以及简便的訪问的方法/解决方式!

    2021年12月6日
    388
  • responsebody作用ajax,@ResponseBody 用法

    responsebody作用ajax,@ResponseBody 用法返回数据ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区(响应体中),通常用来返回JSON数据。需要注意,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,它的效果等同于通过response对象输出指定格式的数据。这也是我们通常的用法ajax的结束标识符最近我写一个购物车的业务…

    2022年5月27日
    61
  • 1g的树莓派4b能做什么_树莓派4B开发板简介

    1g的树莓派4b能做什么_树莓派4B开发板简介树莓派简介RaspberryPi(中文名为“树莓派”,简写为RPi,(或者RasPi/RPI)是为学生计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux,随着Windows10IoT的发布,我们也将可以用上运行Windows的树莓派,别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全。树莓派由注册于英国的慈善组织“Raspber…

    2022年5月20日
    41
  • oracle dba教程视频_oracledatabase dba手册

    oracle dba教程视频_oracledatabase dba手册我机器上只有一部分的版本:http://v.youku.com/v_show/id_XMTk3MTgzMzI=.htmlhttp://www.ixdba.net/article/b3/1317.htmlhttp://itboba.com/taxonomy/term/620http://v.youku.com/v_playlist/f2972170o1p9.html

    2022年9月26日
    4
  • python 请在微信客户端打开_(未解决)jmeter报错之“请在微信客户端打开链接”

    python 请在微信客户端打开_(未解决)jmeter报错之“请在微信客户端打开链接”这是一个还没解决的问题,这里纯粹记录自己思考的过程,后续给自己参考。先说明情景:对微信公众号的一个接口进行调用跑通,后续可能需要压测(是的,仅仅是调通一个接口而已o(╥﹏╥)o)1、按照我理解的正常套路,我直接请求对应的接口,然后通过抓包得到Cookie,写入到HTTPCookie管理器中,如下:emmmm….开始百度,发现也有类似的提问,但是没有一个靠谱有效的答案。然后我就去分析登录过程了…

    2022年5月2日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号