使用R写出k-means的基础算法
时间: 2024-03-03 18:50:45 浏览: 62
以下是使用R语言实现k-means基础算法的代码:
```
# 假设有n个样本,每个样本有m个特征
# k表示聚类的个数
k_means <- function(data, k, max_iter = 100) {
# 随机选取k个数据点作为聚类中心
centers <- data[sample(nrow(data), k), ]
# 初始化聚类结果和迭代次数
clusters <- rep(0, nrow(data))
iter <- 0
# 迭代过程
repeat {
# 计算每个样本点到各个聚类中心的距离,选择最近的一个聚类中心作为其所属的簇
for (i in 1:nrow(data)) {
distances <- apply(centers, 1, function(x) sum((x - data[i,])^2))
clusters[i] <- which.min(distances)
}
# 更新聚类中心
for (j in 1:k) {
centers[j,] <- colMeans(data[clusters == j,])
}
# 判断是否达到最大迭代次数或者聚类结果不再变化
iter <- iter + 1
if (iter >= max_iter || all(clusters == old_clusters)) {
break
}
old_clusters <- clusters
}
# 返回聚类结果和聚类中心
return(list(clusters = clusters, centers = centers))
}
```
其中,data表示输入的样本数据,每一行代表一个样本,每一列代表一个特征;k表示聚类的个数;max_iter表示最大迭代次数,默认为100。返回值为一个list,包括聚类结果和聚类中心。
阅读全文