1

私は本「統計的学習の要素:データマイニング、推論、および予測」(Hashtle、Tibshirani、Friedman)に示されている例を実装しています。

私の目的は、2つの二変量正規分布から10 + 10の平均を生成し、最初の10の平均を使用して「緑」というラベルの付いたポイントを生成し、他の10の平均を使用して「赤」のポイントを生成することです。ポイントを生成する必要がある2変量ガウス分布の平均値は、毎回ランダムに選択する必要があります。私はRにあまり詳しくないので、forループを使用しました。これを使用すると、nが大きくなるにつれて非常に長い時間がかかります。これが私のコードです:

Sigma = diag(2)
greenMeans= mvrnorm(n=10, c(1,0), Sigma)
redMeans= mvrnorm(n=10, c(0,1), Sigma)

n=1000000
green<- array(dim=c(n,2))
red<- array(dim=c(n,2))

for (i in 1:n)
        {
            newGreen<- mvrnorm(n=1,greenMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
            newRed<- mvrnorm(n=1,redMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
            green[i,1] <- newGreen[1]
            green[i,2] <- newGreen[2]
            red[i,1] <- newRed[1]
            red[i,2] <- newRed[2]
    }
4

1 に答える 1

0

for ループを完全にスキップして を使用できますがreplicate、どれだけ高速かはわかりません。

do_stuff = function() {
   newGreen<- mvrnorm(n=1,greenMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
   newRed<- mvrnorm(n=1,redMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)         
   return(list(newGreen, newRed))
 }
replicate(10000, do_stuff)   
于 2013-02-10T11:27:17.963 に答える