欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 【R语言】Kmeans算法

【R语言】Kmeans算法

2025/8/5 22:00:07 来源:https://blog.csdn.net/qq_59554113/article/details/145910084  浏览:    关键词:【R语言】Kmeans算法

使用R语言实现kmeans算法底层代码,并对HighDensity_Scatter_Data数据进行聚类分析(不直接使用kmeans函数)

# 导包library(ggplot2)library(RColorBrewer) # 加载数据mydata <- read.table("D:/RWorkPlace/K-means聚类分析/K-means聚类分析/HighDensity_Scatter_Data.csv", header = TRUE, sep = ",")#画出原始数据的散点图,这是个带透明度设置的黑色散点图ggplot(data = mydata, aes(x,y)) +geom_point( colour="black",alpha=0.1)+labs(x = "Axis X",y="Axis Y")+theme(text=element_text(size=15,color="black"),plot.title=element_text(size=15,family="myfont",face="bold.italic",hjust=.5,color="black"),legend.position="none")# 指定将数据集分成 k 个类别k <- 2 # 指定质心数量# step:0,设定质心,nrow读取有问题不知道为什么,我直接手动设置行列了m <- 10000  # 数据集样本数mn <- 2  # 维度dimcenters <- matrix(0, nrow = 10000, ncol = 2)  # 定义聚类中心存储矩阵# 根据设定的聚类中心数随机获取样本中的点作为初始聚类中心坐标for (i in 1:k) {index <- sample(1:m, 1)  # 随机获取一个索引centers[i,1 ] <- mydata[index, 1]  # 将x中的第index行赋值给centers的第i行centers[i,2 ] <- mydata[index, 2]}# KMeans核心实现代码for (i in 1:600) {# 备份一下质心数据t_center <- centers# step1: 计算距离dist_list <- matrix(0, nrow = m, ncol = k)for (j in 1:k) {dist_list[, j] <- sqrt(rowSums((mydata - centers[j, ])^2) + 1)}# step2: 计算极值argmin_dist <- apply(dist_list, 1, which.min)# step3: 更新质心for (j in 1:k) {cluster_points <- mydata[argmin_dist == j, ]if (nrow(cluster_points) > 0) {centers[j, ] <- apply(cluster_points, 2, mean)}}# step4: 重复1、2、3步,直到质心不再发生改变if (identical(t_center, centers)) {print(i)break}}cat("质心坐标矩阵:\n")print(centers)cat("\n各样本点标签值:\n")print(argmin_dist)#创建cluster列映射颜色mydata$cluster <- as.factor(argmin_dist)#将聚类结果映射到每个点上,给每个点赋予颜色ggplot(data = mydata, aes(x,y,color=cluster)) +geom_point( alpha=0.2)+scale_color_manual(values=c("#00AFBB",  "#FC4E07"))+labs(x = "Axis X",y="Axis Y")+theme(text=element_text(size=15,color="black"),plot.title=element_text(size=15,family="myfont",face="bold.italic",color="black"),legend.background=element_blank(),legend.position=c(0.85,0.15)

运行结果

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词