1
我正在實施「統計學習元素:數據挖掘,推理和預測(Hashtle,Tibshirani,Friedman)」一書中給出的示例。優化循環
我的目標是從兩個二元正態分佈生成10 + 10平均值,然後使用前10個方法生成標記爲「綠色」的點,其他十個方法生成「紅色」點。必須從中生成一個點的雙變量高斯的平均值必須每次隨機挑選。我對R不太熟悉,所以我使用了for循環,因爲它越來越大,所以需要花費很多時間。這裏是我的代碼:
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]
}
這兩個命令是不等價的, '樣品( redMeans,1,replace = TRUE)' 沒有考慮到我們手中有一個二維數組的事實;它會從矢量中的20個標量中選取一個隨機數。它應該從矢量redMeans中選取一個隨機點。 另外,'mvrnorm'的'mu'參數不能像那樣工作。 'mu'是給出變量平均值的向量,而不是包含每個單一點平均值的向量。 – jsonaj 2013-02-10 11:47:09
@ user2058602我刪除了我的答案的錯誤和推測部分。 – 2013-02-10 11:49:16