繁体   English   中英

使用distance_neighbor_search距离包

[英]using nearest_neighbor_search of distance package

我正在尝试将distances包与这些代码一起使用:

library(distances)
library(dplyr)

set.seed(42)

x <- matrix(rnorm(100), ncol = 10)

df <- as.data.frame(x)
df$id <- paste0("x_", seq.int(nrow(df)))

distances <- distances(df, id_variable = "id")
distances

这将生成一个距离矩阵对象,如下所示:

          x_1      x_2      x_3      x_4      x_5      x_6      x_7      x_8      x_9     x_10
x_1  0.000000 3.843183 4.093911 3.643060 4.935399 4.327867 4.287775 6.205355 6.197274 2.180997
x_2  3.843183 0.000000 5.084690 5.170822 5.067423 3.788407 4.383991 5.770031 7.113060 2.830447
x_3  4.093911 5.084690 0.000000 3.571286 4.547878 4.102882 3.531970 3.916854 6.470266 3.733713
x_4  3.643060 5.170822 3.571286 0.000000 3.820931 3.842954 3.667172 5.513104 5.176213 3.294032
x_5  4.935399 5.067423 4.547878 3.820931 0.000000 4.815130 3.465038 5.917983 6.137555 4.763992
x_6  4.327867 3.788407 4.102882 3.842954 4.815130 0.000000 2.793542 3.936627 5.475425 3.022680
x_7  4.287775 4.383991 3.531970 3.667172 3.465038 2.793542 0.000000 4.075392 5.251397 4.010323
x_8  6.205355 5.770031 3.916854 5.513104 5.917983 3.936627 4.075392 0.000000 5.510953 5.151613
x_9  6.197274 7.113060 6.470266 5.176213 6.137555 5.475425 5.251397 5.510953 0.000000 6.167744
x_10 2.180997 2.830447 3.733713 3.294032 4.763992 3.022680 4.010323 5.151613 6.167744 0.000000

我想使用此程序包的Nearest_neighbor_search函数来获取每行最接近的3行(理想情况是该行本身除外)。 我阅读了文档,但不确定100%如何使用它。 谢谢。

因此,对于第一行X_1,此代码为:

x <- as.data.frame(distance_columns(distances, 1))
x <- tibble::rownames_to_column(x, "id") 
x <- x[order(-x[, 2], decreasing = TRUE),]
x

生产:

     id      x_1
1   x_1 0.000000
10 x_10 2.180997
4   x_4 3.643060
2   x_2 3.843183
3   x_3 4.093911
7   x_7 4.287775
6   x_6 4.327867
5   x_5 4.935399
9   x_9 6.197274
8   x_8 6.205355

最接近的前3行是x_10,x_4和x_2。

通过只写nearest_neighbor_search(distances, k= 4) ,其中k是最近的邻居数(例如,如果您要3,那么您应该写4):

nearest_neighbor_search(distances, 4, query_indices = NULL,
                        search_indices = NULL, radius = NULL)     
x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10
[1,]   1   2   3   4   5   6   7   8   9   10
[2,]  10  10   7  10   7   7   6   3   4    1
[3,]   4   6   4   3   4  10   5   6   7    2
[4,]   2   1  10   1   3   2   3   7   6    6

您得到x_1的3个最近邻居。 即1(本身)10,4和2。您可以删除第一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM