简单好用!经典机器学习聚类算法——K-means
生信人R语言学习必备
立刻拥有一个Rstudio账号
开启升级模式吧
(56线程,256G内存,个人存储1T)
最近小果看了很多文章,发现了一些高分文章的共有技术点——聚类
于是小果绝对带给大家一个经典聚类算法的代码案例教学,希望让大家都能写出高分文章,也让小云沾沾喜气!
K-Means聚类是一种无监督学习算法,用于将数据点分组成k个簇。该算法将数据点分配到距离它们最近的簇中,其中距离通常是欧氏距离。
然后,通过计算每个簇的质心(簇中所有数据点的平均值),来确定每个簇的中心点。这些步骤反复进行,直到质心不再改变或达到最大迭代次数为止。让我们直接进入主题!上代码!
1、下载所需要的R包
install.packages("factoextra")
install.packages("cluster")
2、加载所需R包
library(factoextra)
library(cluster)
3、示例数据
该数据为R语言内置数据集,包含美国每个州每10万因不同犯罪类型而被捕的人数,以及每个州居住在城市地区的人口百分比(UrbanPop)
4、选择合适的聚类数量
#读取数据
df <- USArrests
#去除缺失值
df <- na.omit(df)
#数据归一化
df <- scale(df)
(1)利用手肘法确认最佳聚类数量(手肘法:通常我们创建这类图形寻找某个K类对应的平方和值开始弯曲或趋于平缓的肘形。这通常是最理想的聚类数量。)
fviz_nbclust(df,kmeans,method=”wss”)
#根据上图可以看出k=4时出现肘性,所以后续实验聚类数量为4
(2)差距统计确认最佳聚类数量
#计算不同k值聚类差距变化情况
gap_stat <- clusGap(df , FUN = kmeans , nstart = 25 , K.max = 10 , B = 50)
fviz_gap_stat(gap_stat)
#根据上图可以看出k=4时,差距统计最大,与手肘法结果相同。
5、执行kmeans聚类
# 设置随机种子,让结果可以重现
set.seed(1)
# 调用kmeans聚类算法 k = 4
km <- kmeans(df, centers = 4, nstart = 25)
# 结果可视化,并保存到本地
result<-fviz_cluster(km, data = df)
pdf(file = "Kmean.pdf",width=12,height=9)
print(result)
dev.off()
#保留聚类结果到数据集中
final_data <- cbind(USArrests, cluster = km$cluster)
结果显示分类结果为4个簇,分别包含16、13、13和8个州,以四种颜色圈出对应的区域并展示。
以上就是k-means聚类的实验流程,很简单吧,加到文章里又是点睛的一笔,快动动小手试试吧!
(小果新开发的零代码云生信分析工具平台包含超多零代码小工具,上传数据一键出图,感兴趣的小伙伴欢迎来参观哟,网址:http://www.biocloudservice.com/home.html)
扫码加小果
领取生信大礼包
点击“阅读原文”立刻拥有
↓↓↓