R语言实现KMeans聚类算法实例教程_第1页
R语言实现KMeans聚类算法实例教程_第2页
R语言实现KMeans聚类算法实例教程_第3页
R语言实现KMeans聚类算法实例教程_第4页
R语言实现KMeans聚类算法实例教程_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第R语言实现KMeans聚类算法实例教程目录什么是k-means聚类算法R实现kmeans聚类算法加载包加载示例数据寻找最佳聚类数量使用最优k执行kmeans聚类kmeans算法的优缺点总结本文和你一起学习无监督机器学习算法kmeans算法,并在R中给详细的实现示例和步骤。

什么是k-means聚类算法

聚类是从数据集中对观测值进行聚类的机器学习方法。它的目标是聚类相似观测值,不同类别之间差异较大。聚类是一种无监督学习方法,因为它仅尝试从数据集中发现结构,而不是预测应变量的值。

下面是一个市场营销中对客户分类的场景,通过下面客户信息:

家庭收入住房面积户主职业据城区距离

我们利用这些信息进行聚类,可识别相似家庭,从而能够识别某类型家庭可能购买某种产品或对某种类型的广告反应更好。

最常用的聚类算法就是k-means聚类算法,下面我们介绍k-means算法并通过示例进行说明。

k-means聚类算法把数据集中每个观测值分为K个类别。每个分类中的观测值相当类似,K类之间彼此差异较大。实际应用中执行下列几步实现k-means聚类算法:

1.确定K值

首先确定把数据集分为几类。通常我们简单测试几个不同值K,然后分析结果,确定那个值更有现实意义。

2.将每个观察结果随机分配到一个初始簇中,从1到K。

3.执行以下步骤,直到集群分配停止变化。

对于K个集群中的每一个,计算集群的质心。这仅仅是第k个簇中观测的p特征的向量。

将每个观测值分配到质心最近的簇中。在这里最接近的是用欧氏距离来定义的。

下面通过示例展示R的实现过程。

R实现kmeans聚类算法

加载包

首先加载两个包,包括kmeans算法的一些辅助函数。

library(factoextra)

library(cluster)

加载示例数据

对于本例我们将使用R中内置的usarrest数据集,该数据集包含1973年美国每个州每10万居民因谋杀、袭击和强奸而被捕的人数,以及每个州居住在城市地区的人口百分比(UrbanPop)。

#loaddata

df-USArrests

#removerowswithmissingvalues

df-na.omit(df)

#scaleeachvariabletohaveameanof0andsdof1

df-scale(df)

#viewfirstsixrowsofdataset

head(df)

#MurderAssaultUrbanPopRape

#Alabama1.242564080.7828393-0.5209066-0.003416473

#Alaska0.507862481.1068225-1.21176422.484202941

#Arizona0.071633411.47880320.99898011.042878388

#Arkansas0.232349380.2308680-1.0735927-0.184916602

#California0.278268231.26281441.75892342.067820292

#Colorado0.025714560.39885930.86080851.864967207

上面代码首先加载USArrests数据集,删除缺失值,对数据值进行标准化。

寻找最佳聚类数量

执行kmeans聚类算法,我们可以使用内置包stat中的kmeans()函数,语法如下:

kmeans(data,centers,nstart)

data:数据集名称centers:聚类数量,即选择k的值nstart:初始配置个数。因为不同的初始启动集合可能会导致不同的结果,所以建议使用几种不同的初始配置。k-means算法将找到导致簇内变异最小的初始配置。

既然在使用kmeans函数之前并不确定最优聚类数量,下面通过两个图来辅助我们决定:

1.聚类数量vs.总体平方和

首先使用fviz_nbclust函数创建一个图,展示聚类数量及总体平方和之间的关系:

fviz_nbclust(df,kmeans,method="wss")

通常我们创建这类图形寻找某个K类对应的平方和值开始弯曲或趋于平缓的肘形。这通常是最理想的聚类数量。上图中显然在k=4个时出现肘形。

2.聚类数量vs.差距统计

另一个决定最佳聚类数量的是使用指标:差距统计。它用于比较不同k值聚类差距变化情况。使用cluster包中的clusGap()以及fviz_gap_stat()函数画图:

#calculategapstatisticbasedonnumberofclusters

gap_stat-clusGap(df,

FUN=kmeans,

nstart=25,

K.max=10,

B=50)

#plotnumberofclustersvs.gapstatistic

fviz_gap_stat(gap_stat)

从上图可以看到k=4时,差距统计最大,这与前面图的结果一致。

使用最优k执行kmeans聚类

最后,我们执行kmeans函数,使用k=4作为最优值:

#设置随机种子,让结果可以重现

set.seed(1)

#调用kmeans聚类算法k=4

km-kmeans(df,centers=4,nstart=25)

#查看结果

#ShowinNewWindow

#Clusteringk=1,2,...,K.max(=10):..done

#Bootstrapping,b=1,2,...,B(=50)[one"."persample]:

#..................................................50

#RConsole

#ShowinNewWindow

#K-meansclusteringwith4clustersofsizes13,13,16,8

#Clustermeans:

#MurderAssaultUrbanPopRape

#1-0.9615407-1.1066010-0.9301069-0.96676331

#20.69507011.03944140.72263701.27693964

#3-0.4894375-0.38260010.5758298-0.26165379

#41.41188980.8743346-0.81452110.01927104

#Clusteringvector:

#AlabamaAlaskaArizonaArkansasCaliforniaColorado

#422422

#ConnecticutDelawareFloridaGeorgiaHawaiiIdaho

#332431

#IllinoisIndianaIowaKansasKentuckyLouisiana

#231314

#MaineMarylandMassachusettsMichiganMinnesotaMississippi

#123214

#MissouriMontanaNebraskaNevadaNewHampshireNewJersey

#211213

#NewMexicoNewYorkNorthCarolinaNorthDakotaOhioOklahoma

#224133

#OregonPennsylvaniaRhodeIslandSouthCarolinaSouthDakotaTennessee

#333414

#TexasUtahVermontVirginiaWashingtonWestVirginia

#231331

#WisconsinWyoming

#13

#Withinclustersumofsquaresbycluster:

#[1]11.95246319.92243716.2122138.316061

#(between_SS/total_SS=71.2%)

#Availablecomponents:

#[1]"cluster""centers""totss""withinss""tot.withinss"

#[6]"betweenss""size""iter""ifault"

从结果可见:

16州分在第一个类13州分在第二个类13州分在第三个类8州分在第四个类

我们可以通过fviz_cluster()函数在二维空间中以散点图方式展示结果:

#plotresultsoffinalk-meansmodel

fviz_cluster(km,data=df)

也可以使用aggregate()函数查看每个类中变量的均值:

#findmeansofeachcluster

aggregate(USArrests,by=list(cluster=km$cluster),mean)

#clusterMurderAssaultUrbanPopRape

#13.6000078.5384652.0769212.17692

#210.81538257.3846276.0000033.19231

#35.65625138.8750073.8750018.78125

#413.93750243.6250053.7500021.41250

输出结果解释如下:

在第一类中的州中平均每100,000人谋杀数为3.6在第一类中的州中平均每100,000人袭击数为78.5在第一类中的州中平均每100,000人城区居民率为52.1%在第一类中的州中平均每100,000人强奸数为3.612.2

最后我们把聚类结果附加到原始数据集中:

#addclusterassigmenttooriginaldata

final_data-cbind(USArrests,cluster=km$cluster)

#viewfinaldata

head(final_data)

#MurderAssaultUrbanPopRapecluster

#Alabama13.22365821.24

#Alaska10.02634844.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论