似乎' SwarmSVM'包曾经有一个kmeans.predict函数,但不再有。
我想将数据帧划分为训练+测试子集以训练模型然后进行测试。我目前只能使用' kmeans'创建集群的功能,但我无法确定用于训练和测试模型的功能/包。
答案 0 :(得分:2)
k -means是一种聚类方法,即用于无监督学习,不受监督,因此不能用于预测未来数据,因为添加更多数据会改变中心。可以进行分类的监督替代方案包括 k -NN,LDA / QDA和SVM,但是这种方法需要具有已知类别的训练集。
所有这一切,你可能使用predict
为stats::kmeans
编写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
答案 1 :(得分:1)
install.packages("class")
library(class)
使用knn功能
有关进一步的帮助,请参阅
?knn