R语言K-中心点聚类分析
K-中心点算法与K-means算法在原理上相近,不同的是,K-中心点算法在选择中心点时不取样本均值点,而是在类别内选取到其余样本距离之和最小的样本为中心点。
K-中心点算法主要是用cluster软件包中的pam()函数来实现的。该函数的基本格式为:
pam(x, k, diss = inherits(x, "dist"), metric = c("euclidean", "manhattan"), medoids = NULL, stand = FALSE, cluster.only = FALSE, do.swap = TRUE, keep.diss = !diss && !cluster.only && n < 100, keep.data = !diss && !cluster.only, pamonce = FALSE, trace.lev = 0)
其中x表示待处理数据集,k表示类别数;metric用于选择样本点间距离测算的方式,包括"euclidean",和"manhattan";medoids默认为NULL时,表示由软件选择初始中心点样本,也可手动设定k维向量来指定初始点;stand表示聚类前是否需要标准化;cluster.only默认为FALSE,为TRUE表示仅获取样本类别。
1 读取数据集。
Tourism_shares=read.csv("Tourism_shares.csv",head=T,encoding="utf-8")
head(Tourism_shares)
dim(Tourism_shares)
2 进行聚类分析。
library(cluster)#加载软件包
fit_pam1=pam(na.omit(Tourism_shares[,3:6]),k=3)#采用k中心点算法将数据集分为k=3类
print(fit_pam1) #输出聚类结果
结果中的Medoids指明了具体第几个样本为各类别的中心点。
3 保存每个样本的所属类别。
Tourism_shares["K_Medoids_cluster"]=fit_pam1$cluster
head(Tourism_shares)#查看数据
和前面的K-means聚类结果对比,可以发现不同样本点在两种算法的聚类结果是有差别的。
4 绘制散点图。
plot(Tourism_shares[,3:6],pch=fit_pam1$cluster-1)