微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在K表示使用R进行聚类之后,检索最接近每个聚类质心的100个样本

如何解决在K表示使用R进行聚类之后,检索最接近每个聚类质心的100个样本

我正在尝试通过首先在R中执行K-均值聚类,然后每个代表性簇采样50-100个样本用于下游分类和特征选择来减小输入数据的大小。

原始数据集被拆分为80/20,然后80%进行了K均值训练。我知道输入数据有2列标签和110列数字变量。从标签栏,我知道有7种不同的药物治疗方法。同时,我测试了弯头方法,以找到簇数的最佳K,大约为8。因此,我选择了10,以便有更多数据簇可供下游采样。

现在我已经完成了模型

然后对于10个质心,我如何找出标签是什么?我不能只是做

training_set$centroids <- model$centroids

最重要的问题是,如何在每个簇中找到与各自质心接近的100个样本?我在python中看到过一篇文章,但还没有R资源。 Output 50 samples closest to each cluster center using scikit-learn.k-means library 有指针吗?

解决方法

首先,我们需要一个可复制的数据示例:

set.seed(42)
x <- matrix(runif(150),50,3)
kmeans.x <- kmeans(x,10)

现在,您想在原始数据x中找到最接近于计算并存储为kmeans.x的质心的观测值。我们在软件包get.knnx()中使用FNN函数。我们将只获取10个聚类中的每个5个最接近的观测值。

library(FNN)
y <- get.knnx(x,kmeans.x$centers,5)
str(y)
# List of 2
#  $ nn.index: int [1:10,1:5] 42 40 50 22 39 47 11 7 8 16 ...
#  $ nn.dist : num [1:10,1:5] 0.1237 0.0669 0.1316 0.1194 0.1253 ...
y$nn.index[1,]
# [1] 42 38  3 22 43
idx1 <- sort(y$nn.index[1,])
cbind(idx1,x[idx1,])
#      idx1                          
# [1,]    3 0.28614 0.3984854 0.21657
# [2,]   22 0.13871 0.1404791 0.41064
# [3,]   38 0.20766 0.0899805 0.11372
# [4,]   42 0.43577 0.0002389 0.08026
# [5,]   43 0.03743 0.2085700 0.46407

最近的邻居的行索引存储在nn.index中,因此对于第一个聚类,5个最近的观测值分别为42、38、3、22、43。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?