2016-04-06 19 views
-1

注:元はCrossで掲載されていますが、推奨事項はここではより適切なトピックになります。KNNが上位N個の隣人を見つける

私は分類のためにFNNパッケージでknnメソッドを使用していますが、最も近いものだけではなくN個の最も近いネイバーを表示したいと思います。私は別のパッケージ(FastKNNとknncatなど)で試しましたが、私はあなたのためにこれを行う高速な関数を見つけることができません。

これは、同様の質問(距離行列のマイナス部分)である:これは私が試したものであるFind K nearest neighbors, starting from a distance matrix

:LINEは、距離行列の1つの行が含まれ、LINE_Nは、各予測

ための上位N個の近隣を含んでいます
line_n = c() 

    tmp_min <- order(line)[1:ncol(distance)] 
    tmp_id <- c() 

    for (element in tmp_min) 
    tmp_id <- c(tmp_id, colnames(distance)[element]) 

    for (element in tmp_id){ 

     if (!(element %in% line_n)) 
     line_n<- c(line_n, element) 
     if (length(line_n) == N) 
     break 
    } 

    line_n 

既に実装されている最適化されたバージョンが存在するのか、誰かがそれをより速くする方法についてアイデアを持っているのではないかと思っていました。ここで

+0

おかげで、私は1つを見たことがなかったです。 (と私はそれが間違っているかもしれないので、私はRの新しいですが)私はそれが私がやっていると思う。このline_nベクトルを最初に宣言された最終結果行列に追加します。そして、line_nを得るために私は距離マトリックス(これは決して変更しません)をループし、一度に1つの行を処理します。 – rdm11

答えて

0

は、あなたが探しているもののためのコードです:

line_ret = c() 
while(length(line_ret) < M) 
{ 
    tmp = which.min(line) 
    if (!(col_name[tmp] %in% line_ret)) 
    line_ret = c(line_ret, col_name[tmp]) 
    line <- line[-c(tmp)] 
    col_name <- col_name[-c(tmp)] 
} 
line_ret 
関連する問題