MrR*_*ROY 6 r cluster-analysis machine-learning
我是R的新手,我已经使用hclust以下方法训练了模型:
model=hclust(distances,method="ward”)
Run Code Online (Sandbox Code Playgroud)
结果看起来不错:

现在我得到一些新的数据记录,我想预测它们每个属于哪个集群.我该如何完成?
正如名称所示,聚类不应该"分类"新数据 - 它是分类的核心概念.
一些聚类算法(如基于质心的kmeans,kmedians等)可以根据创建的模型"标记"新实例.不幸的是,层次聚类不是其中之一 - 它不对输入空间进行分区,它只是"连接"聚类期间给出的一些对象,因此您无法将新点指定给此模型.
使用hclust进行"分类"的唯一"解决方案"是在hclust给出的标记数据之上创建另一个分类器.例如,您现在可以使用hclust中的标签对数据进行训练(即使k = 1),并使用它为新点指定标签.
如前所述,您可以使用诸如 class :: knn 之类的分类器来确定新个体属于哪个集群。
KNN 或 k-最近邻算法是最简单的机器学习算法之一,是基于实例的学习的一个例子,其中新数据基于存储的标记实例进行分类。更具体地说,存储数据和新实例之间的距离是通过某种相似性度量来计算的。该相似性度量通常由诸如欧几里得距离之类的距离度量来表示。
接下来我留下一个代码作为虹膜数据的例子。
library(scorecard)
library(factoextra)
library(class)
df_iris <- split_df(iris, ratio = 0.75, seed = 123)
d_iris <- dist(scale(df_iris$train[,-5]))
hc_iris <- hclust(d_iris, method = "ward.D2")
fviz_dend(hc_iris, k = 3,cex = 0.5,k_colors = c("#00AFBB","#E7B800","#FC4E07"),
color_labels_by_k = TRUE, ggtheme = theme_minimal())
groups <- cutree(hc_iris, k = 3)
table(groups)
Run Code Online (Sandbox Code Playgroud)
预测新数据
knnClust <- knn(train = df_iris$train[,-5], test = df_iris$test[,-5] , k = 1, cl = groups)
knnClust
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 2 3 3 3 2 2 2 2 2 3 3 2 2 3 2 2 2 2 2 2 2 2 2
Levels: 1 2 3
# p1 <- fviz_cluster(list(data = df_iris$train[,-5], cluster = groups), stand = F) + xlim(-11.2,-4.8) + ylim(-3,3) + ggtitle("train")
# p2 <- fviz_cluster(list(data = df_iris$test[,-5], cluster = knnClust),stand = F) + xlim(-11.2,-4.8) + ylim(-3,3) + ggtitle("test")
# gridExtra::grid.arrange(p1,p2,nrow = 2)
pca1 <- data.frame(prcomp(df_iris$train[,-5], scale. = T)$x[,1:2], cluster = as.factor(groups), factor = "train")
pca2 <- data.frame(prcomp(df_iris$test[,-5], scale. = T)$x[,1:2], cluster = as.factor(knnClust), factor = "test")
pca <- as.data.frame(rbind(pca1,pca2))
Run Code Online (Sandbox Code Playgroud)
绘制训练和测试数据
ggplot(pca, aes(x = PC1, y = PC2, color = cluster, size = 1, alpha = factor)) +
geom_point(shape = 19) + theme_bw()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11859 次 |
| 最近记录: |