K-mean聚类是很基础的算法,在本科阶段大家都会学,如何通过R语言自己写K-mean算法,话不多说,上代码,算法流程和函数解释代码后
K_means <- function(data,k,max.iter = 10){
rows <- nrow(data) #获取行数
cols <- ncol(data) #获取列数
within <- numeric(k) #用于存储组类平方和
lable_matrix <- matrix(0,rows,2) #用于存储类标签及到类中心的距离
centers <- matrix(0,cols,k) #用于存储类中心
centers_matrix <- matrix(0,rows,k) #用于存储初始确定初始类中心时到类中心的距离
iter <- 0 #迭代次数
random <- sample(1:rows,1)
centers[,1] <- as.matrix(data[random,])
for(j in 2:k){
for(i in 1:rows){
centers_matrix[i,j] <- sum((data[i,] - centers[,j-1])^2)+centers_matrix[i,j-1]
}
centers[,j] <- as.matrix(data[which(centers_matrix[,j] == max(centers_matrix[,j])),])
} #计算初始类中心
changed <- TRUE #用于判断数据的类标签是否发生改变
while(changed){
if(iter >= max.iter){
changed <- FALSE