SlideShare a Scribd company logo
繰返しの並列処理
-foreach & doParallel-
Windowsで開発しましたが, Mac
OSでもLinuxでも動くと思います
統計環境Rによる
2014/3/10
foreachパッケージ
• 単体で使用しても繰返し処理を高
速化する。
• snowやparallelなどの並列処理
パッケージと組み合わせると繰返
し処理を並列化できる。
• forループとの違い
出力は1つだけ
これが問題!
2
foreach: 出力制御のコツ
制約: 出力は1つだけ
• アウトプットの構造や書き出される
順番を理解し、必要があれば後から自
分で配列化などを施す
• 複数の出力も順番を間違えなければ
扱える
3
例) 回帰パラメータ算出実験
乱数データから回帰係数を算出する
モンテカルロ実験を3回だけ繰返す
‐ xは一様乱数で三変量
‐ yは次の回帰モデルに従い、自由度3
のt分布に従う乱数を誤差項として付与
y=10+5x1+2x2+3x3
自由度の小さいt分布は正規分布よりも裾が長いので、ちょっと
荒れてる感じのデータになります。結果、そのデータから回帰パ
ラメータを推計したとき、真の値と差異が出やすいです。 4
2 4 6 8
40
60
80
100
x1[, 1]
y1
データのイメージ
第一説明変数 x1
目的変数 y1
5
並列化の準備として
まずforeachの結果の
戻し方を確認します
実験: 1A, 1B, 1C
6
例) 回帰パラメータ算出実験(1A)
rm(list=ls(all=TRUE)) # ワークスペースのクリア
require(foreach); require(MASS) # for rt
set.seed(15)
theta1 <- c(10, 5, 2, 3) # 回帰パラメータ "y=10+5x1+2x2+3x3"
ot1 <- foreach(i=1:3, .combine=c) %do% {
x1 <- matrix(runif(300, min=1, max=10), nc=3, nr=100) # xの値
x2 <- cbind(rep(1, dim(x1)[1]), x1) # 1列目に要素が全て1の列を付与
y1 <- x2 %*% theta1 + rt(100, df=3) # yは推計値+残差
lm(y1 ~ x1)$coeff
}
ot1
is.vector(ot1)
注) まだパラレル化はしていません
7
例) 回帰パラメータ算出実験(1B)
rm(list=ls(all=TRUE)) # ワークスペースのクリア
require(foreach); require(MASS) # for rt
set.seed(15)
theta1 <- c(10, 5, 2, 3) # 回帰パラメータ "y=10+5x1+2x2+3x3"
ot2 <- foreach(i=1:3, .combine="cbind") %do% {
x1 <- matrix(runif(300, min=1, max=10), nc=3, nr=100) # xの値
x2 <- cbind(rep(1, dim(x1)[1]), x1) # 1列目に要素が全て1の列を付与
y1 <- x2 %*% theta1 + rt(100, df=3) # yは推計値+残差
lm(y1 ~ x1)$coeff
}
ot2
is.matrix(ot2)
8
例) 回帰パラメータ算出実験(1C)
rm(list=ls(all=TRUE)) # ワークスペースのクリア
require(foreach); require(MASS) # for rt
set.seed(15)
theta1 <- c(10, 5, 2, 3) # 回帰パラメータ "y=10+5x1+2x2+3x3"
ot3 <- foreach(i=1:3, .combine="rbind") %do% {
x1 <- matrix(runif(300, min=1, max=10), nc=3, nr=100) # xの値
x2 <- cbind(rep(1, dim(x1)[1]), x1) # 1列目に要素が全て1の列を付与
y1 <- x2 %*% theta1 + rt(100, df=3) # yは推計値+残差
lm(y1 ~ x1)$coeff
}
ot3
is.list(ot3)
9
結果出力の違い
> ot1
(Intercept) x11 x12 x13 (Intercept) x11
10.899300 4.914961 1.978661 2.960806 10.562035 5.005228
x12 x13 (Intercept) x11 x12 x13
1.962990 2.939047 9.786081 5.035381 1.947302 3.102226
> is.vector(ot1)
[1] TRUE
> ot2
result.1 result.2 result.3
(Intercept) 10.899300 10.562035 9.786081
x11 4.914961 5.005228 5.035381
x12 1.978661 1.962990 1.947302
x13 2.960806 2.939047 3.102226
> is.matrix(ot2)
[1] TRUE
> ot3
(Intercept) x11 x12 x13
result.1 10.899300 4.914961 1.978661 2.960806
result.2 10.562035 5.005228 1.962990 2.939047
result.3 9.786081 5.035381 1.947302 3.102226
> is.matrix(ot3)
[1] TRUE
.combine=c
.combine="cbind"
.combine="rbind"
ベクトルだったり
行列だったりするけど
出力は一つだけ
10
doParallelパッケージを使って
同じ処理を並列化してみます
実験: 1A → 2
11
例) 回帰パラメータ算出実験(2)
rm(list=ls(all=TRUE)) # ワークスペースのクリア
s_time <- Sys.time() # 開始時間記録のための呪文
require(foreach); require(MASS) # for rt
require(doParallel)
type <- if (exists("mcfork", mode="function")) "FORK" else "PSOCK"
cores <- getOption("mc.cores", detectCores())
cl <- makeCluster(cores, type=type) # コア数を自動検出
registerDoParallel(cl) # コア数で並列化
set.seed(15)
theta1 <- c(10, 5, 2, 3) # 回帰パラメータ "y=10+5x1+2x2+3x3"
ot1 <- foreach(i=1:3, .combine=c) %dopar% {
x1 <- matrix(runif(300, min=1, max=10), nc=3, nr=100) # xの値
x2 <- cbind(rep(1, dim(x1)[1]), x1) # 1列目に要素が全て1の列を付与
y1 <- x2 %*% theta1 + rt(100, df=3) # yは推計値+残差
lm(y1 ~ x1)$coeff
}
stopCluster(cl) # 並列化終了のための呪文
e_time <- Sys.time() # 終了時間記録のための呪文
ot1
12
コア毎に違う乱数が割り当てられる
ために結果は変わる
> ot1
(Intercept) x11 x12 x13 (Intercept) x11
9.495911 4.987828 2.035046 3.063866 10.212789 5.040721
x12 x13 (Intercept) x11 x12 x13
1.905662 3.046415 8.409125 5.133967 2.103635 3.064619
> ot1
(Intercept) x11 x12 x13 (Intercept) x11
10.899300 4.914961 1.978661 2.960806 10.562035 5.005228
x12 x13 (Intercept) x11 x12 x13
1.962990 2.939047 9.786081 5.035381 1.947302 3.102226
実験1Aの結果(並列化前)
実験2の結果(並列化後)
13
で、もちろん速くなるよね?
どんな処理をどのくらいの量だけ並列化するか
によります。この例もそうですが、基本的に遅
くなると考えた方が良いです。 ご利用は慎重に。
> e_time - s_time
Time difference of 0.5630572 secs
実験1Aの結果(並列化前)
> e_time - s_time
Time difference of 10.46505 secs
実験2の結果(並列化後)
並列化前が
圧倒的に速い!
実験2のコードの上
から二行目と下から
二行目の時間測定の
呪文を実験1Aの
コードにも書き加え
て測定しました
14
どうして並列化で遅くなるの?
前の処理の結果に依存する処理は並列化できない
一方、並列化のためには新たな処理(パッケージのロードやコア間通信な
ど)が必要となる
処理の依存関係のない並列化可能な部分の処理が、例えば4コアで75%
時間を短縮できたとしても、全体のなかでその効率化が新たに必要になる
処理時間を上回る分量でなければトータルで速くはならない
リモワ ルフトハンザ
並列化前
I/O 並列化不能部分 並列化可能な部分
¼に 並列化のための処理
遅くなる犯人!
並列化後
15
アムダールの法則
並列化可能な部分が全体の50%ならば、どんなにコア数の多い
高価なPCで並列化しても、理論値でさえ2倍の速度が限界です。
P: 並列化可能部分の割合
S: コアの数
1
1 − 𝑃 + 𝑃/𝑆
並列化の効果:
実
測
は
も
っ
と
ず
っ
と
効
率
悪
い
で
す
。
16
TO DO or NOT TO DO
自分一人で作業した方が早いか、そのへ
んの人を何人か連れて来て仕事を説明して
作業を分けてでも手伝ってもらった方が早
く終わるような作業内容なのかを見極める。
• 一つずつ順を追って処理しなければいけない仕
事ならば、淡々と一人で片づけるしかない。
• 分業可能な作業であれば、作業の説明や仕分け
やまとめなどの新たな手間が増えるのと、分業
の効率を天秤にかけて判断する。
並列処理は、分業させるためのコード書
きも大変なので、それに見合う効率化が
見込めるときにだけ役立つ技なのです。
17
具体的な判断手順
1. コードを精査し、並列処理できる部分とそうでない部分を
切り分けて、並列処理部分は極力少ない塊にまとめる
2. 並列処理できる部分とそうでない部分を別々に時間計測す
る
3. 並列処理できる部分が、全体の何パーセントになるのかを
計算し、アムダールの法則のグラフで理論効率を確認
4. 実測効率は理論効率よりもはるかに悪いことを覚悟する
それでもやりたければ並列化コードを書く
5. 大量データを取扱う場合、この並列化はメモリ共有型なの
で、作業を切り分ける大きさに留意する
大きく切れば早いがメモリ不足の危険があり、小さく切り
すぎれば遅くなる
まずシングルコア版を作成し、そこから並列化版を作ると良い
です。両者の結果が変わらないことが確認できれば安心です。 18
行列要素の並び順:
Rとfortranは縦並び
> x0 <- 1:100
> (x1 <- matrix(x0, nc=10))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
> x1[21]
[1] 21 ちなみにCは横並びだそうです。
19
配列要素の場合は?
> x0 <- 1:1000
> (x1 <- array(x0, c(10,10,10)))
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
, , 2
20
なぜ並び順が重要?
• 変数一つの出力の中に
複数の情報を詰め込む
場合、どの情報がどう
いう順番に入っている
かわかっていないと使
えない
• 高速なコードのために、
極力キャッシュミスが
起こりにくいような処
理を心がける
21
キャッシュ
ディスク
メモリ
レジスタ
CPU
低速
安価
大容量
高速
高価
小容量
参考: 「チューニング技法虎の巻」 https://www.hpci-office.jp/pages/407
並列化によるシミュレーション
実験: 2 → 3
22
例) 回帰パラメータ算出実験(3)
rm(list=ls(all=TRUE)) # ワークスペースのクリア
s_time <- Sys.time()# 開始時間記録のための呪文
require(foreach); require(MASS) # for rt
require(doParallel)
type <- if (exists("mcfork", mode="function")) "FORK" else "PSOCK"
cores <- getOption("mc.cores", detectCores())
cl <- makeCluster(cores, type=type) # コア数を自動検出
registerDoParallel(cl) # コア数で並列化
set.seed(15)
theta1 <- c(10, 5, 2, 3) # 回帰パラメータ "y=10+5x1+2x2+3x3"
ot1 <- foreach(i=1:4, .combine=c) %dopar% { # コア数の倍数が効率良いです
cf2 <- matrix(NA, nc=2500, nr=4) # 縦に並べないとわけがわからなくなる!!!
for (j in 1:2500) {
x1 <- matrix(runif(300, min=1, max=10), nc=3, nr=100) # xの値
x2 <- cbind(rep(1, dim(x1)[1]), x1) # 1列目に要素が全て1の列を付与
y1 <- x2 %*% theta1 + rt(100, df=3) # yは推計値+残差
cf2[,j] <- lm(y1 ~ x1)$coeff
}
cf2
}
stopCluster(cl) # 並列化終了のための呪文
e_time <- Sys.time() # 終了時間記録のための呪文
ot1
23
比較用のシングルコア版コード(1A’)
rm(list=ls(all=TRUE)) # ワークスペースのクリア
s_time <- Sys.time()# 開始時間記録のための呪文
require(foreach); require(MASS) # for rt
set.seed(15)
theta1 <- c(10, 5, 2, 3) # 回帰パラメータ "y=10+5x1+2x2+3x3"
ot1 <- foreach(i=1:4, .combine=c) %do% {
cf2 <- matrix(NA, nc=2500, nr=4) # 縦に並べないとわけがわからなくなる!!!
for (j in 1:2500) {
x1 <- matrix(runif(300, min=1, max=10), nc=3, nr=100) # xの値
x2 <- cbind(rep(1, dim(x1)[1]), x1) # 1列目に要素が全て1の列を付与
y1 <- x2 %*% theta1 + rt(100, df=3) # yは推計値+残差
cf2[,j] <- lm(y1 ~ x1)$coeff
}
cf2
}
e_time <- Sys.time() # 終了時間記録のための呪文
e_time - s_time
24
並列化で嬉しくなるのは?
• 400回
シングル Time difference of 2.374 secs
並列化 Time difference of 8.911 secs
• 4000回
シングル Time difference of 7.158 secs
並列化 Time difference of 11.222 secs
• 10000回
シングル Time difference of 15.31853 secs
並列化 Time difference of 15.63356 secs
• 40000回
シングル Time difference of 55.244 secs
並列化 Time difference of 36.901 secs
• 100000回
シングル Time difference of 2.264043 mins
並列化 Time difference of 1.329983 mins
25
Windows VISTA, 32bit, R3.0.0, コア数2の条件でテストした結果
結論: シミュレーションに使える!
length(ot1)
[1] 40000
> ot1x <- matrix(ot1, nr=4) # 整形
> dim(ot1x)
[1] 4 10000
> apply(ot1x, 1, mean)
[1] 10.008551 4.999126 1.999420 3.000582
> apply(ot1x, 1, median)
[1] 10.010047 4.998599 1.999008 3.000921
# モデルの理論値は10, 5, 2, 3
26
データの取り出し方
おわり
27
参考資料
Revolution Analytics. “doParallel: Foreach parallel adaptor for the parallel
package,” R package version 1.0.1. 2012, available at http://CRAN.R-
project.org/package=doParallel.
Revolution Analytics, “foreach: Foreach looping construct for R,” R package
version 1.4.0. 2012, available at http://CRAN.R-
project.org/package=foreach.
S. Weston and R. Calaway, “Getting started with doParallel and foreach,”
2010, available at http://cran.r-
project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf.
S. Weston, “Using the foreach packages,” 2009, available at
http://www.rochester.edu/college/psc/thestarlab/help/UsingTheForeachPac
kage.pdf.

More Related Content

What's hot

最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-
Shintaro Fukushima
 
PRML2.1 2.2
PRML2.1 2.2PRML2.1 2.2
PRML2.1 2.2
Takuto Kimura
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
 
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMCベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
基晴 出井
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
Hiroshi Shimizu
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
 
コピュラと金融工学の新展開(?)
コピュラと金融工学の新展開(?)コピュラと金融工学の新展開(?)
コピュラと金融工学の新展開(?)
Nagi Teramo
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Shintaro Fukushima
 
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
Hiroshi Shimizu
 
R高速化
R高速化R高速化
R高速化
Monta Yashi
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx
Osamu Ogasawara
 
Rによる特徴抽出 第48回R勉強会@東京(#TokyoR)
Rによる特徴抽出 第48回R勉強会@東京(#TokyoR)Rによる特徴抽出 第48回R勉強会@東京(#TokyoR)
Rによる特徴抽出 第48回R勉強会@東京(#TokyoR)Keiku322
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
Haruka Ozaki
 
多段階計算の型システムの基礎
多段階計算の型システムの基礎多段階計算の型システムの基礎
多段階計算の型システムの基礎
T. Suwa
 
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)
itoyan110
 
マルコフ連鎖モンテカルロ法と多重代入法
マルコフ連鎖モンテカルロ法と多重代入法マルコフ連鎖モンテカルロ法と多重代入法
マルコフ連鎖モンテカルロ法と多重代入法
Koichiro Gibo
 
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
Masashi Komori
 
関数データ解析の概要とその方法
関数データ解析の概要とその方法関数データ解析の概要とその方法
関数データ解析の概要とその方法
Hidetoshi Matsui
 
トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本
トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本
トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本
hoxo_m
 

What's hot (20)

最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-
 
PRML2.1 2.2
PRML2.1 2.2PRML2.1 2.2
PRML2.1 2.2
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMCベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
コピュラと金融工学の新展開(?)
コピュラと金融工学の新展開(?)コピュラと金融工学の新展開(?)
コピュラと金融工学の新展開(?)
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
 
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
 
R高速化
R高速化R高速化
R高速化
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx
 
Rによる特徴抽出 第48回R勉強会@東京(#TokyoR)
Rによる特徴抽出 第48回R勉強会@東京(#TokyoR)Rによる特徴抽出 第48回R勉強会@東京(#TokyoR)
Rによる特徴抽出 第48回R勉強会@東京(#TokyoR)
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
多段階計算の型システムの基礎
多段階計算の型システムの基礎多段階計算の型システムの基礎
多段階計算の型システムの基礎
 
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)
 
マルコフ連鎖モンテカルロ法と多重代入法
マルコフ連鎖モンテカルロ法と多重代入法マルコフ連鎖モンテカルロ法と多重代入法
マルコフ連鎖モンテカルロ法と多重代入法
 
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
 
関数データ解析の概要とその方法
関数データ解析の概要とその方法関数データ解析の概要とその方法
関数データ解析の概要とその方法
 
トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本
トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本
トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本
 

Similar to Rによる繰り返しの並列処理

第三回R勉強会
第三回R勉強会第三回R勉強会
第三回R勉強会Paweł Rusin
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Nagi Teramo
 
JOIss2020 発表資料
JOIss2020 発表資料JOIss2020 発表資料
JOIss2020 発表資料
mdkcpp 1015
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
NVIDIA Japan
 
関東第2回r勉強会
関東第2回r勉強会関東第2回r勉強会
関東第2回r勉強会Paweł Rusin
 
Programming Haskell Chapter 11 切符番号選び
Programming Haskell Chapter 11 切符番号選びProgramming Haskell Chapter 11 切符番号選び
Programming Haskell Chapter 11 切符番号選び
dekosuke
 
Knn発表資料(R)
Knn発表資料(R)Knn発表資料(R)
Knn発表資料(R)
Sora Kubota
 
Prml sec6
Prml sec6Prml sec6
Prml sec6
Keisuke OTAKI
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
Satoshi Yamada
 
Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理
wada, kazumi
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 
Rによるlm関数を使わない回帰と梃子比・cookの距離
Rによるlm関数を使わない回帰と梃子比・cookの距離 Rによるlm関数を使わない回帰と梃子比・cookの距離
Rによるlm関数を使わない回帰と梃子比・cookの距離
wada, kazumi
 
Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JP
Sercan Ahi
 
初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)
karky7
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparseness
ybenjo
 

Similar to Rによる繰り返しの並列処理 (20)

第三回R勉強会
第三回R勉強会第三回R勉強会
第三回R勉強会
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
JOIss2020 発表資料
JOIss2020 発表資料JOIss2020 発表資料
JOIss2020 発表資料
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
 
R language definition3.1_3.2
R language definition3.1_3.2R language definition3.1_3.2
R language definition3.1_3.2
 
関東第2回r勉強会
関東第2回r勉強会関東第2回r勉強会
関東第2回r勉強会
 
Programming Haskell Chapter 11 切符番号選び
Programming Haskell Chapter 11 切符番号選びProgramming Haskell Chapter 11 切符番号選び
Programming Haskell Chapter 11 切符番号選び
 
Knn発表資料(R)
Knn発表資料(R)Knn発表資料(R)
Knn発表資料(R)
 
Prml sec6
Prml sec6Prml sec6
Prml sec6
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
 
Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
Rによるlm関数を使わない回帰と梃子比・cookの距離
Rによるlm関数を使わない回帰と梃子比・cookの距離 Rによるlm関数を使わない回帰と梃子比・cookの距離
Rによるlm関数を使わない回帰と梃子比・cookの距離
 
Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JP
 
初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparseness
 

More from wada, kazumi

2018Rユーザ会用
2018Rユーザ会用2018Rユーザ会用
2018Rユーザ会用
wada, kazumi
 
Ⅳ. 可視化事例集 2017
Ⅳ. 可視化事例集 2017Ⅳ. 可視化事例集 2017
Ⅳ. 可視化事例集 2017
wada, kazumi
 
Ⅲ. 資料編 2017
Ⅲ. 資料編 2017Ⅲ. 資料編 2017
Ⅲ. 資料編 2017
wada, kazumi
 
Ⅱ. データ分析編 2017
Ⅱ. データ分析編 2017Ⅱ. データ分析編 2017
Ⅱ. データ分析編 2017
wada, kazumi
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
wada, kazumi
 
2017Rユーザ会用
2017Rユーザ会用2017Rユーザ会用
2017Rユーザ会用
wada, kazumi
 
Rデモ03_データ分析編2016
Rデモ03_データ分析編2016Rデモ03_データ分析編2016
Rデモ03_データ分析編2016
wada, kazumi
 
Rデモ02_入出力編2016
Rデモ02_入出力編2016Rデモ02_入出力編2016
Rデモ02_入出力編2016
wada, kazumi
 
Rデモ01_はじめの一歩2016
Rデモ01_はじめの一歩2016Rデモ01_はじめの一歩2016
Rデモ01_はじめの一歩2016
wada, kazumi
 
統計環境R_データ分析編2016
統計環境R_データ分析編2016統計環境R_データ分析編2016
統計環境R_データ分析編2016
wada, kazumi
 
統計環境R_はじめの一歩2016
統計環境R_はじめの一歩2016統計環境R_はじめの一歩2016
統計環境R_はじめの一歩2016
wada, kazumi
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016
wada, kazumi
 
自然科学の統計学2.2 slideshare
自然科学の統計学2.2 slideshare自然科学の統計学2.2 slideshare
自然科学の統計学2.2 slideshare
wada, kazumi
 
Rプログラミング03 データ分析編
Rプログラミング03 データ分析編Rプログラミング03 データ分析編
Rプログラミング03 データ分析編
wada, kazumi
 
Rプログラミング03 「データ分析編」デモ
Rプログラミング03 「データ分析編」デモRプログラミング03 「データ分析編」デモ
Rプログラミング03 「データ分析編」デモ
wada, kazumi
 
Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編
wada, kazumi
 
Rプログラミング02 「データ入出力編」デモ
Rプログラミング02 「データ入出力編」デモRプログラミング02 「データ入出力編」デモ
Rプログラミング02 「データ入出力編」デモ
wada, kazumi
 
Rプログラミング01 「はじめの一歩」 演習デモ
Rプログラミング01 「はじめの一歩」 演習デモRプログラミング01 「はじめの一歩」 演習デモ
Rプログラミング01 「はじめの一歩」 演習デモ
wada, kazumi
 
Rプログラミング01 はじめの一歩
Rプログラミング01 はじめの一歩Rプログラミング01 はじめの一歩
Rプログラミング01 はじめの一歩
wada, kazumi
 
Rによる大規模データのプロット
Rによる大規模データのプロットRによる大規模データのプロット
Rによる大規模データのプロット
wada, kazumi
 

More from wada, kazumi (20)

2018Rユーザ会用
2018Rユーザ会用2018Rユーザ会用
2018Rユーザ会用
 
Ⅳ. 可視化事例集 2017
Ⅳ. 可視化事例集 2017Ⅳ. 可視化事例集 2017
Ⅳ. 可視化事例集 2017
 
Ⅲ. 資料編 2017
Ⅲ. 資料編 2017Ⅲ. 資料編 2017
Ⅲ. 資料編 2017
 
Ⅱ. データ分析編 2017
Ⅱ. データ分析編 2017Ⅱ. データ分析編 2017
Ⅱ. データ分析編 2017
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
2017Rユーザ会用
2017Rユーザ会用2017Rユーザ会用
2017Rユーザ会用
 
Rデモ03_データ分析編2016
Rデモ03_データ分析編2016Rデモ03_データ分析編2016
Rデモ03_データ分析編2016
 
Rデモ02_入出力編2016
Rデモ02_入出力編2016Rデモ02_入出力編2016
Rデモ02_入出力編2016
 
Rデモ01_はじめの一歩2016
Rデモ01_はじめの一歩2016Rデモ01_はじめの一歩2016
Rデモ01_はじめの一歩2016
 
統計環境R_データ分析編2016
統計環境R_データ分析編2016統計環境R_データ分析編2016
統計環境R_データ分析編2016
 
統計環境R_はじめの一歩2016
統計環境R_はじめの一歩2016統計環境R_はじめの一歩2016
統計環境R_はじめの一歩2016
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016
 
自然科学の統計学2.2 slideshare
自然科学の統計学2.2 slideshare自然科学の統計学2.2 slideshare
自然科学の統計学2.2 slideshare
 
Rプログラミング03 データ分析編
Rプログラミング03 データ分析編Rプログラミング03 データ分析編
Rプログラミング03 データ分析編
 
Rプログラミング03 「データ分析編」デモ
Rプログラミング03 「データ分析編」デモRプログラミング03 「データ分析編」デモ
Rプログラミング03 「データ分析編」デモ
 
Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編
 
Rプログラミング02 「データ入出力編」デモ
Rプログラミング02 「データ入出力編」デモRプログラミング02 「データ入出力編」デモ
Rプログラミング02 「データ入出力編」デモ
 
Rプログラミング01 「はじめの一歩」 演習デモ
Rプログラミング01 「はじめの一歩」 演習デモRプログラミング01 「はじめの一歩」 演習デモ
Rプログラミング01 「はじめの一歩」 演習デモ
 
Rプログラミング01 はじめの一歩
Rプログラミング01 はじめの一歩Rプログラミング01 はじめの一歩
Rプログラミング01 はじめの一歩
 
Rによる大規模データのプロット
Rによる大規模データのプロットRによる大規模データのプロット
Rによる大規模データのプロット
 

Rによる繰り返しの並列処理