2

私はRが初めてで、追加されたコードブロックのループをより効率的なものに置き換えようとしています。文脈上、これは多変量 (3 次元) ターゲットを使用した k 最近傍回帰の単純な合成例です。

rm(list=ls())
set.seed(1)

# Fast nearest neighbor package
library(FNN)
k <- 3

# Synthetic 5d predictor and noisy 3d target data
x <- matrix(rnorm(50), ncol=5)
y <- 5*x[,1:3] + matrix(rnorm(30), ncol=3)
print(x)
print(y)

# New synthetic 5d predictor data (4 cases)
x.new <- matrix(rnorm(20), ncol=5)
print(x.new)

# Identify k-nearest neighbors
nn <- knnx.index(data=x, query=x.new, k=k)
print(nn)

現在、次のループで k 最近傍 (nn) の重み付けされていない平均をとっています。

# Unweighted k-nearest neighbor regression predictions based on y and nn
y.new <- matrix(0, ncol=ncol(y), nrow=nrow(x.new))
for(i in 1:nrow(nn))
    y.new[i,] <- colMeans(y[nn[i,],,drop=FALSE])

print(y.new)

ただし、ここでループを回避する簡単な方法が必要です。ありがとう。

4

1 に答える 1