vlambda博客
学习文章列表

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表示仅获取样本类别。

读取数据集。

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指明了具体第几个样本为各类别的中心点。

R语言K-中心点聚类分析

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)