FNN Packageを使用する次のコードがあります。
k <- knn(train, test, labels, k = 10, algorithm="cover_tree")
以下のコードを使用して、knn の呼び出しによって返されたデータを確認できます。
> attr(k, "nn.dist")[1,]
[1] 1385.398 1687.901 1722.884 1846.694 1978.250 1998.157 2003.518 2004.494 2054.382 2059.128
> attr(k, "nn.index")[1,]
[1] 983 362 170 303 914 843 480 489 474 355
私がやりたいのは、 の値にnn.dist
基づいて の値を変更することnn.index
です。
これはおそらく意味をなさないことはわかっていますが、議論のために、各値を に設定するにはどうすればよいでしょうnn.dist
かnn.dist * nn.index/1000
?
したがってattr(k, "nn.dist")[1,1]
、1385.398
から1385.398*983/1000
(1361.846)に移動します。
から
(611.02) などにattr(k, "nn.dist")[1,2]
移動します。1687.901
1687.901*362/1000
次のコードを使用して、これを一度に 1 つずつ行うことができます。
attr(k, "nn.dist")[1,1] = attr(k, "nn.dist")[1,1]*attr(k, "nn.index")[1,1]/1000
しかし、毎回書くことなく、すべての要素に対してこれを行う方法が必要です...