版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江临安农村商业银行股份有限公司2027届校园招聘笔试参考题库及答案解析
- 2026年湖北省宜昌市公务员人员招聘考试参考试题与答案详解
- 某水泥厂节能降耗规范
- 2026四川内江经开区就业和社会保障服务中心招聘见习人员1人笔试参考题库及答案解析
- 2026山东淄博职业技术大学高层次人才招聘13人(第二批)考试备考题库及答案解析
- 2026年福建省五建建设集团有限公司招聘第二批工作人员9人考试模拟试题及答案解析
- 2026年芜湖智能传感器研究院有限公司专业技术人才招聘部分岗位补招笔试模拟试题及答案解析
- 2026年浙江省台州市公务员人员招聘笔试参考试题与答案详解
- 2026宁电投(石嘴山市)能源发展有限公司秋季招聘30人考试模拟试题及答案解析
- 2026重庆水利电力职业技术学院考核招聘事业单位人员(第二批)8人考试备考试题及答案解析
- 2026客服面试题及参考答案
- 2026秋小学苏教版科学四年级上册第三单元学情测试练习卷含答案三套
- 2027贵州航天电器秋季招聘284人考试模拟试题及答案解析
- 2026年高级园林绿化工职业技能鉴定理论考试题库及答案
- 第6课 人民当家作主 第1课时 课件(内嵌视频)2026-2027学年道德与法治五年级上册统编版
- 2026年初级车险理赔试题及答案
- 光伏发电并网工程接入系统设计方案
- 《新能源汽车电工电子技术》课程标准
- 中医胆囊结石护理要点说课
- 2026中国机床检测市场投资前景研究与可持续发展规划研究报告
- 2026年医疗器械基础知识培训资料
评论
0/150
提交评论