SlideShare a Scribd company logo
1 of 27
OH My Julia
                 ~JuliaでGLM編~

        2012/12/01
         Japan.R#3
          和田 計也

サイバー系
サイバー系


     はじめに


     ※この発表は個人の
     見解であり、所属す
     る組織の公式見解で
     はありません。

2012/12/01               1
サイバー系


     自己紹介
  和田 計也(@wdkz)
         静岡県袋井市出身




  サイバー系企業でデータマイニングエンジニア職
         最近DACを買いました



  前職はバイオベンチャー
         バイオマーカ探索してた
         学生時代は枯草菌の研究




2012/12/01                          2
サイバー系


     UseR! 2012行ってきました




2012/12/01                       3
サイバー系


     パネルディスカッションより
       • Rユーザが知るべき第二言語は?




             Rcpp作者のDirkさん   pymc作者のChrisさん   lme4作者のDouglasさん




              C++                Python        Julia




じゅ、Juliaだってー!?
2012/12/01                                                               4
サイバー系


     Julia

             何かよくわからんけど
             ・速くて
             ・数値計算できる
             ・64bitOSだと64bit
             のメモリ空間使えるか
             らRの2^31-1問題と
             サヨナラできる
             ⇒Rの替わりに
              使えんかのう疑惑
             (特に大規模データ)




2012/12/01                     5
サイバー系


     Juliaのビルド
        #CentOSの話ですいません
        git clone git://github.com/JuliaLang/julia.git
        cd julia
        make
        #CentOS6系ならたぶん上記↑ので大丈夫なはずです
        #CentOS5系は激しく苦労します

        #yumでgcc44をインストール
        #ソースからgcc version 4.7.xを
        #インストール

        #まずgcc version 4.7.xでmakeします
        #(julia自体のビルドは成功するのですが、LAPACKのビルドに失敗します。)
        #次にgcc44で(make cleanとかせずに)makeを再開します。
        #コンパイラの指定はjulia/Make.incで行います。
        #これで無事ビルドが最後まで行われます。

        #尚、VirtualBox上のCentOS5, CentOS6, Ubuntu12でjuliaのmakeを
        #したらインスタンスごと落ちた...


             求められるビルドセンス
2012/12/01                                                              6
サイバー系


     ちなみに...




               先週CentOS版のバイナリが出たっぽいのでこれで
               すんなりインストールできるんじゃないかと思う




2012/12/01                                         7
サイバー系


     初めてのJulia




             ん、何故Windows環境なんだ?とか言わない



2012/12/01                                     8
サイバー系


     大規模データをJuliaでGLMしたい
     • Juliaの標準関数にはGLMが含まれていない
     • ググる

     • ふむふむ、githubにGLMのJulia実装をあげてる人がいるのね~




     • ってlme4作者のDouglas Batesさんじゃん!




2012/12/01                                       9
サイバー系


     JuliaでGLMしたかった
 だが、実行してみるとどうしてもエラーになります...




                   記述通りJulia
                   でGLMしようと
                   してもエラー
                   になるって本
                   当かい!?



             ※注)今はもう直ってて動くかもしれません


2012/12/01                              10
サイバー系




      作って
     JuliaのGLMは




      みた
2012/12/01            11
サイバー系


     作ったGLMの制約

  • ロジスティック回帰のみの例示です
    • Rでいうfamily=binomial(“logit”)
    • もちろん、リンク関数と分布を定義すれば“一般化”できます

  • いろいろ不完全です
    • 現状、分布とlink関数が分離できていません
    • weights, offsetパラメータ実装してません

  • glmというよりはglm.fitの実装です       glm.fitの詳細は次ページ
        • JuliaにはRでいうformulaがない
        • JuliaにはRでいうdata.frameがない
        • つまり、glm(y~x, data=smpl.data)みたいな引数を渡す作りにす
          るわけにはいかない!!

2012/12/01                                            12
サイバー系


     (参考)Rのglm.fitについて
  • Rのglm関数はdata.frameとformulaからmodel.matrixを作成
    してglm.fit関数を呼び出している
     • glm(formula=y~x1+x2+x3, data=smpl.df,
       family=binomial(“logit”))
                                内部でこうなってます          X <- model.matrix(formula, data)

        • glm.fit(x=X, y=y, family=binomial(link=“logit”))

             smpl.df                       y              X(これがmodel.matrix型)
                   y    X1      X2    X3            y          (Intercept)   X1 X2male X3B X3C
               1   0    60     male   A         1   0        1          1    60      1    0  0
               2   0    50   female   B         2   0        2          1    50      0    1  0
               3   0    80     male   C         3   0        3          1    80      1    0  1
               4   0    60     male   B         4   0        4          1    60      1    1  0
               5   0    75     male   B         5   0        5          1    75      1    1  0
               6   0    70     male   A         6   0        6          1    70      1    0  0
               7   1    90     male   A         7   1        7          1    90      1    0  0
               8   1    80   female   C         8   1        8          1    80      0    0  1
               9   1    72   female   B         9   1        9          1    72      0    1  0
              10   1    65     male   C        10   1       10          1    65      1    0  1
              11   1    45   female   C        11   1       11          1    45      0    0  1
              12   1   100     male   B        12   1       12          1    100     1    1  0


2012/12/01                                                                                       13
サイバー系


     (参考)Rのglm.fitについて_2
  • glmの結果




  • glm.fitの結果             ほれ、同じ
                              結果




2012/12/01                         14
サイバー系


     (参考)JuliaのGLM_1
     #リンク関数のところ(ロジット関数のみ)
     type Link
        name::String      # name of the link
        linkFun::Function  # link function mu -> eta
        linkInv::Function # inverse link eta -> mu
        muEta::Function     # derivative eta -> d mu/d eta
     end

     logitLink =
           Link("logit",
           mu -> log(mu ./ (1. - mu)),
           eta -> 1. ./ (1. + exp(-eta)),
           eta -> (e = exp(-abs(eta)); f = 1. + e; e ./ (f .* f)))

     #ちょっと関数定義
     function logN0(x)
        ret = [x]
        ret[ret .> 0] = log(ret[ret .> 0])
        ret
     end
     y_log_y(y, mu) = y .* logN0(y ./ mu)

2012/12/01                                                               15
サイバー系


     (参考)JuliaのGLM_2
     #分布のところ(二項分布のみ)
     type Dist
        name::String          # the name of the distribution
        canonical::Link       # the canonical link for the distribution
        variance::Function      # variance function mu -> var
        devResid::Function       # vector of squared deviance residuals
        deviance::Function      # the scalar deviance
        mustart::Function       # derive a starting estimate for mu
     end

     BinomialDist =
        Dist(“Binomial",
           logitLink,
           mu -> max(eps(Float64), mu .* (1. - mu)),
           (y, mu, wt)-> 2 * wt .* (y_log_y(y, mu) + y_log_y(1. - y, 1. - mu)),
           (y, mu, wt)-> -2. * sum(y .* log(mu) + (1. - y) .* log(1. - mu)),
           (y, wt)-> (wt .* y + 0.5) ./ (wt + 1.)




2012/12/01                                                                            16
サイバー系


     (参考)JuliaのGLM_3
         #glmFit関数
         function glmFit(y::Vector{Float64}, X::Matrix{Float64}, dist::Dist, epsilon::Float64,
         maxit::Int32)
          offset = float64(fill(0, length(y)));
          weights = float64(fill(1, length(y)));
          mustart = ((weights .* y) + 0.5) ./ (weights + 1)
          eta = dist.canonical.linkFun(mustart)
          mu = dist.canonical.linkInv(eta)
          (m, n) = size(X);
          devold = sum(dist.devResid(y, mu, weights))
          coef = 1; beta = 1; Q =1; R = 1; w = 1; QRd = 1
          Qr = zeros(n,n)
          pvalue = float64(fill(1, n));
          for iter=1:maxit
            muEtaVal = dist.canonical.muEta(eta)
            z = (eta-offset) + (y - mu) ./ muEtaVal
            w = sqrt((weights .* muEtaVal.^2) ./ dist.variance(mu))
            (Q, R) = qr(diagmm(w, X));
            R1 = R[1:n, 1:n]; Q1 = Q[:, 1:n];
            beta = R1 ¥ (Q1' * (w .* z))
            eta = X * beta
            mu = dist.canonical.linkInv(eta)
            dev = sum(dist.devResid(y, mu, weights))
2012/12/01                                                                                           17
サイバー系


     (参考)JuliaのGLM_4
     #glmFit関数の続き
       if (abs(dev-devold)/(0.1+abs(dev)) < epsilon)
         coef = beta
         break
       else
         devold = dev
         coef=beta
       end
      end
      for i=1:n
       for j=1:n
         if(R[i,j]==0)
           Qr[i,j]=Q[i,j]
         else
           Qr[i,j]=R[i,j]
         end
       end
      end




2012/12/01                                                 18
サイバー系


     (参考)JuliaのGLM_5
     #glmFit関数の続き
      convmat = inv(Qr' * Qr)
      varCf = diag(convmat)
      sErr = sqrt(varCf)
      tvalue = coef./sErr                   p値の算出のために、JuliaからRの関数を使用しています
      _jl_libRmath = dlopen("libRmath")
      for i=1:length(tvalue)
        pvalue[i] = -2 * ccall(dlsym(_jl_libRmath,:pt),Float64,(Float64, Float64), abs(tvalue[i]),
     100000000000)
      end
      nulldev = sum(dist.devResid(y, sum(weighs .* y) ./ sum(weights), weights))
      resdf = m – n; nulldf = m - 1
      aicSeeds = float64(fill(0, m))       AICの算出のために、JuliaからRの関数を使用しています
      for i=1:length(aicSeeds)
        aicSeeds[i] = (weights[i] / weights[i]) * ccall(dlsym(_jl_libRmath,:dbinom), Float64,
     (Float64, Float64, Float64, Int32), round(weights[i]*(y[i])), round(weights[i]), mu[i], 1)
      end
      aic = -2 * sum(aicSeeds) + 2 * n
      (beta, sErr, tvalue, pvalue, dev, resdf, nulldev, nulldf, aic)
     end
            ※注)正規分布関数からの確率値を返すRのpnorm関数がJuliaから呼べなかった(未実装)ため、
                  t分布関数からの確率値を返すRのpt関数を自由度1e+10で呼んで、正規分布からの
                  確率値とほぼ同値を得るようにしています。

2012/12/01                                                                                       19
サイバー系


     初めての、JuliaでのGLM
     最初の動作確認は「Rのglm.fit」説明時に使用した謎のデータ
     • R




     • Julia
             load(“myGlm.jl”)                  #自作GLM関数を読み込む
             y = csvread(“smpl_y.csv”)         #yを読み込む(ただしmatrixになっちゃう)
             y = y[:, 1]                       #yをRでいうvectorに
             X = csvread(“smpl_X.csv”)         #X(model.matrix型)を読み込む
             _jl_libRmath=dlopen(“libRmath”)   #JuliaからRを使うための宣言
             glmFit(y, X, BinomialDist)        #いざGLM
             • 実行結果は次ページ
2012/12/01                                                                20
サイバー系


     初めての、JuliaでのGLM
     動作確認は「Rのglm.fit」説明時に使用した謎のデータ
     • Julia実行結果画面




                                 *結果の整形してなくてすいません。
                                 coef, standardErr, tvalue, pvalue,
               よし、(見にくいけど)       deviance, df, nulldeviance, nulldf,
                                 AICの順に数値が出てます
              Rと同じ結果が得られた!



2012/12/01                                                             21
サイバー系


     デカいデータをJuliaでGLMするための準備
     • 前述の通り、JuliaはRでいうformulaが使えない。
             • 元データフレームからmodel.matrixを作成してJuliaのGLMに突っ込む
             • Juliaよくわかんないから、↑この作業はRでやった

  作業イメージ
   airline <- read.csv(“airline.csv”)
   formula <- Cancelled ~ Year + Month + DayOfWeek + CRSElapsedTime + Distance
   X <- model.matrix(object=formula, data=airline)
   y <- mf$y

   write.table(X, file=“X.csv”, sep=“,”, col.names=FALSE, row.names=FALSE, quote=FALSE)
   write.table(y, file=“y.csv”, sep=“,”, col.names=FALSE, row.names=FALSE, quote=FALSE)




 *注)実際に上記のようにやるとこの段階で既にRが爆死するので、本当はsedとかawkとかcatとか駆使してX.csvは作成してます




2012/12/01                                                                                22
サイバー系


     念願の、Rで爆死するデータ量をJuliaでGLM
     • Rだと爆死する様
             • データはもちろん皆さん大好きairline.csv
               (をmodel.matrixに変換したX.csv)




                                           はい爆死
2012/12/01                                        23
サイバー系


     念願の、Rで爆死するデータ量をJuliaでGLM
     • Juliaだと...




                    メモリエラー.だ ..と...




   (゚∇゚ ;)エッ!?←イマココ
2012/12/01                                24
サイバー系


     まとめ

1. Juliaという素敵な言語があるよ
2. 公開されてたGLMがエラってどうしようも
   無かったので実装したよ
3. Rと違って、matrixでm行 * n列<2^31の
   制約がないからメモリの許す限りのデータ量
   でGLMができる(はずだった)よ
4. 日々精力的に開発がされているため、
   関数名とか頻繁に変わっちゃって
   昨日まで動いていたものが動かなく
   なっちゃったりもして爆死頻度高いよ




2012/12/01                          25
サイバー系


     参考文献

  Julia Lang
       http://julialang.org/
  RとJuliaの言語比較一覧表
        http://www.johnmyleswhite.com/notebook/2012/04/09
        /comparing-julia-and-rs-vocabularies/
  JuliaでのGLM実装(自分には動かせなかった)
        https://github.com/dmbates/Glm
  JuliaからRの関数を使う
   http://dmbates.blogspot.jp/2012/03/julia-functions-for-
 rmath-library.html




2012/12/01                                                   26

More Related Content

Similar to JuliaでGLM

セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門Yuma Ohgami
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
DXRubyとスプライトエディタ
DXRubyとスプライトエディタDXRubyとスプライトエディタ
DXRubyとスプライトエディタmieki256 blawat
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用Nobuaki Oshiro
 
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築kimukou_26 Kimukou
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!Nishida Kansuke
 
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編Daiyu Hatakeyama
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)tamtam180
 
Force.com Developer Group Japan Meetup#2
Force.com Developer Group Japan Meetup#2Force.com Developer Group Japan Meetup#2
Force.com Developer Group Japan Meetup#2Takahiro Yonei
 

Similar to JuliaでGLM (13)

セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
DXRubyとスプライトエディタ
DXRubyとスプライトエディタDXRubyとスプライトエディタ
DXRubyとスプライトエディタ
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用
 
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
 
ggplot2 110129
ggplot2 110129ggplot2 110129
ggplot2 110129
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
 
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
Force.com Developer Group Japan Meetup#2
Force.com Developer Group Japan Meetup#2Force.com Developer Group Japan Meetup#2
Force.com Developer Group Japan Meetup#2
 
Tokyo r50 beginner_2
Tokyo r50 beginner_2Tokyo r50 beginner_2
Tokyo r50 beginner_2
 
Tokyo r30 beginner
Tokyo r30 beginnerTokyo r30 beginner
Tokyo r30 beginner
 

More from Kazuya Wada

DeployR使ってみた話
DeployR使ってみた話DeployR使ってみた話
DeployR使ってみた話Kazuya Wada
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkzKazuya Wada
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話Kazuya Wada
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-ServerあれこれKazuya Wada
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShinyKazuya Wada
 
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Kazuya Wada
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...Kazuya Wada
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話Kazuya Wada
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~Kazuya Wada
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみたKazuya Wada
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Kazuya Wada
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたKazuya Wada
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみたKazuya Wada
 

More from Kazuya Wada (15)

DeployR使ってみた話
DeployR使ってみた話DeployR使ってみた話
DeployR使ってみた話
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-Serverあれこれ
 
R-3.0.0でGLM
R-3.0.0でGLMR-3.0.0でGLM
R-3.0.0でGLM
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShiny
 
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみた
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみた
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 

Recently uploaded

My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」inspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドKen Fukui
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドKen Fukui
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 

Recently uploaded (20)

My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 

JuliaでGLM

  • 1. OH My Julia ~JuliaでGLM編~ 2012/12/01 Japan.R#3 和田 計也 サイバー系
  • 2. サイバー系 はじめに ※この発表は個人の 見解であり、所属す る組織の公式見解で はありません。 2012/12/01 1
  • 3. サイバー系 自己紹介  和田 計也(@wdkz)  静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職  最近DACを買いました  前職はバイオベンチャー  バイオマーカ探索してた  学生時代は枯草菌の研究 2012/12/01 2
  • 4. サイバー系 UseR! 2012行ってきました 2012/12/01 3
  • 5. サイバー系 パネルディスカッションより • Rユーザが知るべき第二言語は? Rcpp作者のDirkさん pymc作者のChrisさん lme4作者のDouglasさん C++ Python Julia じゅ、Juliaだってー!? 2012/12/01 4
  • 6. サイバー系 Julia 何かよくわからんけど ・速くて ・数値計算できる ・64bitOSだと64bit のメモリ空間使えるか らRの2^31-1問題と サヨナラできる ⇒Rの替わりに 使えんかのう疑惑 (特に大規模データ) 2012/12/01 5
  • 7. サイバー系 Juliaのビルド #CentOSの話ですいません git clone git://github.com/JuliaLang/julia.git cd julia make #CentOS6系ならたぶん上記↑ので大丈夫なはずです #CentOS5系は激しく苦労します #yumでgcc44をインストール #ソースからgcc version 4.7.xを #インストール #まずgcc version 4.7.xでmakeします #(julia自体のビルドは成功するのですが、LAPACKのビルドに失敗します。) #次にgcc44で(make cleanとかせずに)makeを再開します。 #コンパイラの指定はjulia/Make.incで行います。 #これで無事ビルドが最後まで行われます。 #尚、VirtualBox上のCentOS5, CentOS6, Ubuntu12でjuliaのmakeを #したらインスタンスごと落ちた... 求められるビルドセンス 2012/12/01 6
  • 8. サイバー系 ちなみに... 先週CentOS版のバイナリが出たっぽいのでこれで すんなりインストールできるんじゃないかと思う 2012/12/01 7
  • 9. サイバー系 初めてのJulia ん、何故Windows環境なんだ?とか言わない 2012/12/01 8
  • 10. サイバー系 大規模データをJuliaでGLMしたい • Juliaの標準関数にはGLMが含まれていない • ググる • ふむふむ、githubにGLMのJulia実装をあげてる人がいるのね~ • ってlme4作者のDouglas Batesさんじゃん! 2012/12/01 9
  • 11. サイバー系 JuliaでGLMしたかった  だが、実行してみるとどうしてもエラーになります... 記述通りJulia でGLMしようと してもエラー になるって本 当かい!? ※注)今はもう直ってて動くかもしれません 2012/12/01 10
  • 12. サイバー系 作って JuliaのGLMは みた 2012/12/01 11
  • 13. サイバー系 作ったGLMの制約 • ロジスティック回帰のみの例示です • Rでいうfamily=binomial(“logit”) • もちろん、リンク関数と分布を定義すれば“一般化”できます • いろいろ不完全です • 現状、分布とlink関数が分離できていません • weights, offsetパラメータ実装してません • glmというよりはglm.fitの実装です glm.fitの詳細は次ページ • JuliaにはRでいうformulaがない • JuliaにはRでいうdata.frameがない • つまり、glm(y~x, data=smpl.data)みたいな引数を渡す作りにす るわけにはいかない!! 2012/12/01 12
  • 14. サイバー系 (参考)Rのglm.fitについて • Rのglm関数はdata.frameとformulaからmodel.matrixを作成 してglm.fit関数を呼び出している • glm(formula=y~x1+x2+x3, data=smpl.df, family=binomial(“logit”)) 内部でこうなってます X <- model.matrix(formula, data) • glm.fit(x=X, y=y, family=binomial(link=“logit”)) smpl.df y X(これがmodel.matrix型) y X1 X2 X3 y (Intercept) X1 X2male X3B X3C 1 0 60 male A 1 0 1 1 60 1 0 0 2 0 50 female B 2 0 2 1 50 0 1 0 3 0 80 male C 3 0 3 1 80 1 0 1 4 0 60 male B 4 0 4 1 60 1 1 0 5 0 75 male B 5 0 5 1 75 1 1 0 6 0 70 male A 6 0 6 1 70 1 0 0 7 1 90 male A 7 1 7 1 90 1 0 0 8 1 80 female C 8 1 8 1 80 0 0 1 9 1 72 female B 9 1 9 1 72 0 1 0 10 1 65 male C 10 1 10 1 65 1 0 1 11 1 45 female C 11 1 11 1 45 0 0 1 12 1 100 male B 12 1 12 1 100 1 1 0 2012/12/01 13
  • 15. サイバー系 (参考)Rのglm.fitについて_2 • glmの結果 • glm.fitの結果 ほれ、同じ 結果 2012/12/01 14
  • 16. サイバー系 (参考)JuliaのGLM_1 #リンク関数のところ(ロジット関数のみ) type Link name::String # name of the link linkFun::Function # link function mu -> eta linkInv::Function # inverse link eta -> mu muEta::Function # derivative eta -> d mu/d eta end logitLink = Link("logit", mu -> log(mu ./ (1. - mu)), eta -> 1. ./ (1. + exp(-eta)), eta -> (e = exp(-abs(eta)); f = 1. + e; e ./ (f .* f))) #ちょっと関数定義 function logN0(x) ret = [x] ret[ret .> 0] = log(ret[ret .> 0]) ret end y_log_y(y, mu) = y .* logN0(y ./ mu) 2012/12/01 15
  • 17. サイバー系 (参考)JuliaのGLM_2 #分布のところ(二項分布のみ) type Dist name::String # the name of the distribution canonical::Link # the canonical link for the distribution variance::Function # variance function mu -> var devResid::Function # vector of squared deviance residuals deviance::Function # the scalar deviance mustart::Function # derive a starting estimate for mu end BinomialDist = Dist(“Binomial", logitLink, mu -> max(eps(Float64), mu .* (1. - mu)), (y, mu, wt)-> 2 * wt .* (y_log_y(y, mu) + y_log_y(1. - y, 1. - mu)), (y, mu, wt)-> -2. * sum(y .* log(mu) + (1. - y) .* log(1. - mu)), (y, wt)-> (wt .* y + 0.5) ./ (wt + 1.) 2012/12/01 16
  • 18. サイバー系 (参考)JuliaのGLM_3 #glmFit関数 function glmFit(y::Vector{Float64}, X::Matrix{Float64}, dist::Dist, epsilon::Float64, maxit::Int32) offset = float64(fill(0, length(y))); weights = float64(fill(1, length(y))); mustart = ((weights .* y) + 0.5) ./ (weights + 1) eta = dist.canonical.linkFun(mustart) mu = dist.canonical.linkInv(eta) (m, n) = size(X); devold = sum(dist.devResid(y, mu, weights)) coef = 1; beta = 1; Q =1; R = 1; w = 1; QRd = 1 Qr = zeros(n,n) pvalue = float64(fill(1, n)); for iter=1:maxit muEtaVal = dist.canonical.muEta(eta) z = (eta-offset) + (y - mu) ./ muEtaVal w = sqrt((weights .* muEtaVal.^2) ./ dist.variance(mu)) (Q, R) = qr(diagmm(w, X)); R1 = R[1:n, 1:n]; Q1 = Q[:, 1:n]; beta = R1 ¥ (Q1' * (w .* z)) eta = X * beta mu = dist.canonical.linkInv(eta) dev = sum(dist.devResid(y, mu, weights)) 2012/12/01 17
  • 19. サイバー系 (参考)JuliaのGLM_4 #glmFit関数の続き if (abs(dev-devold)/(0.1+abs(dev)) < epsilon) coef = beta break else devold = dev coef=beta end end for i=1:n for j=1:n if(R[i,j]==0) Qr[i,j]=Q[i,j] else Qr[i,j]=R[i,j] end end end 2012/12/01 18
  • 20. サイバー系 (参考)JuliaのGLM_5 #glmFit関数の続き convmat = inv(Qr' * Qr) varCf = diag(convmat) sErr = sqrt(varCf) tvalue = coef./sErr p値の算出のために、JuliaからRの関数を使用しています _jl_libRmath = dlopen("libRmath") for i=1:length(tvalue) pvalue[i] = -2 * ccall(dlsym(_jl_libRmath,:pt),Float64,(Float64, Float64), abs(tvalue[i]), 100000000000) end nulldev = sum(dist.devResid(y, sum(weighs .* y) ./ sum(weights), weights)) resdf = m – n; nulldf = m - 1 aicSeeds = float64(fill(0, m)) AICの算出のために、JuliaからRの関数を使用しています for i=1:length(aicSeeds) aicSeeds[i] = (weights[i] / weights[i]) * ccall(dlsym(_jl_libRmath,:dbinom), Float64, (Float64, Float64, Float64, Int32), round(weights[i]*(y[i])), round(weights[i]), mu[i], 1) end aic = -2 * sum(aicSeeds) + 2 * n (beta, sErr, tvalue, pvalue, dev, resdf, nulldev, nulldf, aic) end ※注)正規分布関数からの確率値を返すRのpnorm関数がJuliaから呼べなかった(未実装)ため、 t分布関数からの確率値を返すRのpt関数を自由度1e+10で呼んで、正規分布からの 確率値とほぼ同値を得るようにしています。 2012/12/01 19
  • 21. サイバー系 初めての、JuliaでのGLM 最初の動作確認は「Rのglm.fit」説明時に使用した謎のデータ • R • Julia load(“myGlm.jl”) #自作GLM関数を読み込む y = csvread(“smpl_y.csv”) #yを読み込む(ただしmatrixになっちゃう) y = y[:, 1] #yをRでいうvectorに X = csvread(“smpl_X.csv”) #X(model.matrix型)を読み込む _jl_libRmath=dlopen(“libRmath”) #JuliaからRを使うための宣言 glmFit(y, X, BinomialDist) #いざGLM • 実行結果は次ページ 2012/12/01 20
  • 22. サイバー系 初めての、JuliaでのGLM 動作確認は「Rのglm.fit」説明時に使用した謎のデータ • Julia実行結果画面 *結果の整形してなくてすいません。 coef, standardErr, tvalue, pvalue, よし、(見にくいけど) deviance, df, nulldeviance, nulldf, AICの順に数値が出てます Rと同じ結果が得られた! 2012/12/01 21
  • 23. サイバー系 デカいデータをJuliaでGLMするための準備 • 前述の通り、JuliaはRでいうformulaが使えない。 • 元データフレームからmodel.matrixを作成してJuliaのGLMに突っ込む • Juliaよくわかんないから、↑この作業はRでやった 作業イメージ airline <- read.csv(“airline.csv”) formula <- Cancelled ~ Year + Month + DayOfWeek + CRSElapsedTime + Distance X <- model.matrix(object=formula, data=airline) y <- mf$y write.table(X, file=“X.csv”, sep=“,”, col.names=FALSE, row.names=FALSE, quote=FALSE) write.table(y, file=“y.csv”, sep=“,”, col.names=FALSE, row.names=FALSE, quote=FALSE) *注)実際に上記のようにやるとこの段階で既にRが爆死するので、本当はsedとかawkとかcatとか駆使してX.csvは作成してます 2012/12/01 22
  • 24. サイバー系 念願の、Rで爆死するデータ量をJuliaでGLM • Rだと爆死する様 • データはもちろん皆さん大好きairline.csv (をmodel.matrixに変換したX.csv) はい爆死 2012/12/01 23
  • 25. サイバー系 念願の、Rで爆死するデータ量をJuliaでGLM • Juliaだと... メモリエラー.だ ..と... (゚∇゚ ;)エッ!?←イマココ 2012/12/01 24
  • 26. サイバー系 まとめ 1. Juliaという素敵な言語があるよ 2. 公開されてたGLMがエラってどうしようも 無かったので実装したよ 3. Rと違って、matrixでm行 * n列<2^31の 制約がないからメモリの許す限りのデータ量 でGLMができる(はずだった)よ 4. 日々精力的に開発がされているため、 関数名とか頻繁に変わっちゃって 昨日まで動いていたものが動かなく なっちゃったりもして爆死頻度高いよ 2012/12/01 25
  • 27. サイバー系 参考文献  Julia Lang http://julialang.org/  RとJuliaの言語比較一覧表 http://www.johnmyleswhite.com/notebook/2012/04/09 /comparing-julia-and-rs-vocabularies/  JuliaでのGLM実装(自分には動かせなかった) https://github.com/dmbates/Glm  JuliaからRの関数を使う http://dmbates.blogspot.jp/2012/03/julia-functions-for- rmath-library.html 2012/12/01 26