R语言实现聚类kmeans

本文详细介绍了R语言中k-means和PAM聚类算法的实现与应用场景。通过实例展示了如何使用kmeans()和pam()函数进行聚类,并对比了两者在结果上的差异。同时,强调了可视化在数据解读中的重要性,通过pairs()和ggpairs()函数绘制散点图,以及使用barchart()函数生成段剖面图,以帮助理解聚类结果。
摘要由CSDN通过智能技术生成

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:张丹,R语言中文社区专栏特邀作者,《R的极客理想》系列图书作者,民生银行大数据中心数据分析师,前况客创始人兼CTO。

个人博客 http://fens.me, Alexa全球排名70k。

前言

聚类属于无监督学习中的一种方法,k-means作为数据挖掘的十大算法之一,是一种最广泛使用的聚类算法。我们使用聚类算法将数据集的点,分到特定的组中,同一组的数据点具有相似的特征,而不同类中的数据点特征差异很大。PAM是对k-means的一种改进算法,能降低异常值对于聚类效果的影响。

聚类可以帮助我们认识未知的数据,发现新的规律。

目录

k-means实现

PAM实现

可视化和段剖面图

1.k-means实现

k-means算法,是一种最广泛使用的聚类算法。k-means以k作为参数,把数据分为k个组,通过迭代计算过程,将各个分组内的所有数据样本的均值作为该类的中心点,使得组内数据具有较高的相似度,而组间的相似度最低。

k-means工作原理:

初始化数据,选择k个对象作为中心点。

遍历整个数据集,计算每个点与每个中心点的距离,将它分配给距离中心最近的组。

重新计算每个组的平均值,作为新的聚类中心。

上面2-3步,过程不断重复,直到函数收敛,不再新的分组情况出现。

k-means聚类,适用于连续型数据集。在计算数据样本之间的距离时,通常使用欧式距离作为相似性度量。k-means支持多种距离计算,还包括maximum, manhattan, pearson, correlation, spearman, kendall等。各种的距离算法的介绍,请参考文章R语言实现46种距离算法

1.1

kmeans()函数实现

在R语言中,我们可以直接调用系统中自带的kmeans()函数,就可以实现k-means的聚类。同时,有很多第三方算法包也提供了k-means的计算函数。当我们需要使用kmeans算法,可以使用第三方扩展的包,比如flexclust, amap等包。

本文的系统环境为:

Win10 64bit

R: 3.4.4 x86_64-w64-mingw32

接下来,让我们做一个k-means聚类的例子。首先,创建数据集:

1# 创建数据集

2>set.seed(0)

3> df <- rbind(matrix(rnorm(100,0.5,4.5), ncol =2),

4+             matrix(rnorm(100,0.5,0.1), ncol =2))

5> colnames(df) <- c("x","y")

6> head(df)

7x          y

8[1,]6.18329431.6976181

9[2,]-0.9680501-1.1951622

10[3,]6.484096711.4861408

11[4,]6.2259319-3.0790260

12[5,]2.36588650.2530514

13[6,]-6.42977521.6256360

使用stats::kmeans()函数,进行聚类。

1> cl <- kmeans(df,2); cl

2K-means clustering with2clusters of sizes14,86

3

4Cluster means:# 中心点坐标

5x         y

615.8215262.7343127

72-0.3159460.1992429

8

9Clustering vector:# 分组的索引

10[1]12112222211222222222222121122222222112121222222112

11[51]22222222222222222222222222222222222222222222222222

12

13Within cluster sum of squaresbycluster:

14[1]316.0216716.4009# withinss,分组内平方和  

15(between_SS / total_SS =34.0%)# 组间的平方和/总平方和,用于衡量点聚集程度

16

17Available components:# 对象属性

18[1]"cluster""centers""totss""withinss""tot.withinss""betweenss"

19[7]"size""iter""ifault"

20

21# 查看数据分组情况,第1组86个,第2组14个

22> cl$size

23[1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值