[英]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.