欢迎关注天善智能,我们是专注于商业智能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