5

Rを使用して1点のk最近傍(特にkdツリー)を検索するパッケージまたは簡単な方法はありますか?この関数を提供するすべてのパッケージ(例:RANNまたはFNN ...)は、行列内のすべてのポイントのknnを計算します。これは、1つのポイントに対してのみ実行する必要があります。

たとえば、10個の点「A」から「E」の行列があり、すべてに対して同じ計算を行わずに、「A」について他の4つの点(「B」から「E」)の間の2つの最近傍を見つけたいとします。データセット内の行(「B」、「C」、「D」、「E」のknnを計算せずに)

私の質問が明確であることを願っています、私の英語は良くありません。

助けてくれてありがとう、

4

1 に答える 1

13

私が正しく理解していれば、FNNパッケージを使用してこれを行うことができます。

> library(FNN)
> X <- matrix(runif(100), 5, 5)
> X
          [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 0.7475301 0.6725876 0.2511358 0.5048512 0.1196027
[2,] 0.5777907 0.6337206 0.8334608 0.5067914 0.6410024
[3,] 0.5488786 0.9613076 0.2217271 0.6906149 0.7396482
[4,] 0.8230380 0.8596784 0.6348114 0.6211107 0.3089131
[5,] 0.6531433 0.8682462 0.2555402 0.2443061 0.5292509
> knnx.dist(X[-1,], X[1, , drop=FALSE], k=2)
          [,1]     [,2]
[1,] 0.4870996 0.531889
> knnx.index(X[-1,], X[1, , drop=FALSE], k=2)
     [,1] [,2]
[1,]    3    4

knnx.indexの結果は、関数に渡される行列に関連しているため、3と4は、実際には行4と5を元のデータセットを意味することに注意してください。

于 2012-12-24T21:37:44.903 に答える