2016-09-15 5 views
0

データセットのコストを計算しています。このネストされたforループを単純化する方法はありますか?適用または行列乗算を使用する必要がありますか?R(複数階ロジスティクスロス計算用)のループ用にネストされたベクトル化

その他の背景:これは、機械学習で使用されるmuti-classロジスティック損失です。 y_mはラベルy(ラベル10個の分類)に由来するインジケータ行列です。私はh2とyをランダムに生成することによって、最小の再現可能なコードを持つ問題を単純化しています。

h2=matrix(runif(5000*10),ncol=10) 
y=round(runif(5000)*9)+1 

y_m <- matrix(0,ncol=10,nrow=length(y)) 
y_m[cbind(1:length(y),y)] <- 1 

J=0 
for(i in 1:5000){ 
    for(k in 1:10){ 
    J=J-y_m[i,k]*log(h2[i,k])-(1-y_m[i,k])*log(1-h2[i,k]); 
    } 
} 
J 

答えて

3

これを試してみてください:

J <- sum(- y_m * log(h2) - (1-y_m) * log(1-h2)) 
0
devtools::install_github("alexwhitworth/glmEnsemble") 
?glmEnsemble::multiclass_logloss 
関連する問題