在 R 中使用什么包进行 Kmeans 预测?

Mar*_*old 1 r cluster-analysis k-means

似乎“SwarmSVM”包曾经有一个 kmeans.predict 函数,但现在没有了。

我想将数据帧划分为训练+测试子集以训练模型然后对其进行测试。我目前只能使用 'kmeans' 函数来创建集群,但我无法弄清楚使用哪些函数/包来训练和测试模型。

ali*_*ire 7

k -means 是一种聚类方法,即用于无监督学习,不受监督,因此并非旨在预测未来数据,因为添加更多数据会改变中心。可以进行分类的有监督替代方法包括k- NN、LDA/QDA 和 SVM,但这种方法需要具有已知类别的训练集。

综上所述,您可以编写一个predict用于stats::kmeansusing的方法dist,因为您可能真的在寻找离该点最近的中心。几乎没有优化,但功能齐全:

predict.kmeans <- function(object, newdata){
    centers <- object$centers
    n_centers <- nrow(centers)
    dist_mat <- as.matrix(dist(rbind(centers, newdata)))
    dist_mat <- dist_mat[-seq(n_centers), seq(n_centers)]
    max.col(-dist_mat)
}

set.seed(47)
in_train <- sample(nrow(iris), 100)
mod_kmeans <- kmeans(iris[in_train, -5], 3)
test_preds <- predict(mod_kmeans, iris[-in_train, -5])

table(test_preds, iris$Species[-in_train])
#>           
#> test_preds setosa versicolor virginica
#>          1      0          0        10
#>          2      0         18         7
#>          3     15          0         0
Run Code Online (Sandbox Code Playgroud)