paramtuner 東京node学園#8

24
Param Tuner @muddydixon 東京Node学園 8時限目 13425日木曜日

Upload: daichi-morifuji

Post on 28-May-2015

997 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: ParamTuner 東京Node学園#8

Param Tuner@muddydixon

東京Node学園 8時限目

13年4月25日木曜日

Page 2: ParamTuner 東京Node学園#8

お詫び✓ParamTunerの話だけでは尺が持たなかったので最近作ったあれこれの話を含めます

13年4月25日木曜日

Page 3: ParamTuner 東京Node学園#8

me✓Data Science✓Data Visualization

✓working @ Nifty

13年4月25日木曜日

Page 4: ParamTuner 東京Node学園#8

最近作ったあれこれ✓ParamTuner✓grunt-contrib-tuning✓Series.interpolate.js✓Series.js ←イマ作ってる

✓全体的に改善・時系列のあれこれです

13年4月25日木曜日

Page 5: ParamTuner 東京Node学園#8

Param Tuner✓パラメタ空間を定義✓Strategyを選択✓パラメタ空間の中で試行✓bestな解を取り出してくれる✓binもあります

13年4月25日木曜日

Page 6: ParamTuner 東京Node学園#8

Strategy✓現在実装済みなのは、Greedyのみ✓ つまりランダムで施行して良い結果を選択

✓GeneralizeLinearModel(線形モデル)は間に合いませんでした m( _ _ )m

✓ サンプル点からモデルを作成し、極小点を探索する戦略

13年4月25日木曜日

Page 7: ParamTuner 東京Node学園#8

Param Tuner bin{        "params":  {                "alpha":  {                        "range":  [0,  1]                }        },        "command":  "echo  $RANDOM",        "report":  {                "type":  "json",                "filename":  "./report.json"        }        }

plan.json

13年4月25日木曜日

Page 8: ParamTuner 東京Node学園#8

Param Tuner bin%  ./bin/tuner  -­‐p  ./example/plan.json

13年4月25日木曜日

Page 9: ParamTuner 東京Node学園#8

Param Tuner{    "time":  {        "begin":  "2013-­‐04-­‐24T19:15:58.559Z",        "end":  "2013-­‐04-­‐24T19:15:58.628Z"    },    "results":  {        "best":  {            "cost":  3164,            "params":  {                "alpha":  0.5529168925713748            }        },        "iteration":  [            {                "params":  {                    "alpha":  0.20574524416588247                },                "cost":  19094            },            {                "params":  {                    "alpha":  0.5529168925713748                },

report.json

13年4月25日木曜日

Page 10: ParamTuner 東京Node学園#8

Param Tuner bin{        "params":  {                "alpha":  {                        "range":  [0,  1]                }        },        "command":  "echo  $RANDOM",        "report":  {                "type":  "json",                "filename":  "./report.json"        }        }

plan.json

パラメタ空間の定義

13年4月25日木曜日

Page 11: ParamTuner 東京Node学園#8

Param Tuner bin{    "params":  {        "alpha":  3.5,  //  const        "beta":  {            "range":  [0,  10]  //  range  [begin,  end]        },        "gamma":  {            "enum":  [1,  3,  6,  9]  //  enumerate  [items]        }    }}

params

13年4月25日木曜日

Page 12: ParamTuner 東京Node学園#8

Param Tuner bin{        "params":  {                "alpha":  {                        "range":  [0,  1]                }        },        "command":  "./command.js",        "report":  {                "type":  "json",                "filename":  "./report.json"        }        }

plan.json 外部jsを利用することもできます

通常のmoduleと同様 exports してください

13年4月25日木曜日

Page 13: ParamTuner 東京Node学園#8

Param Tuner module✓moduleとして利用するときにはいくつかの機能を利用できます✓prepare✓ 施行探索前に実施する(データのロードなど)

✓env✓ 施策ごとに環境を変えることができる✓ サーバのポートなど

13年4月25日木曜日

Page 14: ParamTuner 東京Node学園#8

Param Tuner moduleTuner  =  require  'paramtuner'tuner  =  new  Tuner    #  施行ごとに繰り返される処理を記述    command:  (env,  params,  next)-­‐>        #  なんか処理してcostが求まる  costなので小さいほうが良い        next(null,  cost)        #  探索するパラメタ空間を定義    params:        alpha:            range:  [0,  10]        beta:            range:  [0,  10]        #  探索前に処理しておく内容を記述  command内のenv.$topicで取り出すことが可能    prepare:  (done)-­‐>        done  null,  {data:  [0,  1,  2,  3,  4]}  #  実際にはdbから取得など

Usage

13年4月25日木曜日

Page 15: ParamTuner 東京Node学園#8

Param Tuner moduleTuner  =  require  'paramtuner'tuner  =  new  Tuner

   #  ~中略~

   #  施行ごとに異なる環境を提供する場合  以下の場合、5000から1つずつ上げていく    #  envで返される関数が毎回実行される  commandの第1引数から取得可能    env:  ()-­‐>        port  =  5000        ()-­‐>            {                port:  port++            }

   #  探索後の処理  例えば、最適なパラメタでWebサーバ起動など    done:  (err,  results,  time)-­‐>        best  =  results.best        #  best.params  を使って処理        console.log  "best  cost  is  #{best.cost}"                    tuner.start()

Usage

13年4月25日木曜日

Page 16: ParamTuner 東京Node学園#8

Param Tuner module✓Todo✓ Strategyの追加

❖ 特に一般線形モデル作ったら気持ちよさそう

✓ grunt-contrib-tuning (現在はやっつけ)❖ このmoduleを利用した形に変更する❖ さっきやりました

13年4月25日木曜日

Page 17: ParamTuner 東京Node学園#8

grunt-contrib-tuning✓gruntで使えます!✓multitasktuning:    #  required:  tuning  case  name    test:          #  required:  tuning  parameter  list        params:              alpha:                range:  [0,  1]            beta:                range:  [5,  10]            gamma:                range:  [10,  100]        prepare:  (next)-­‐>            next  null,  {hoge:  'fuga'}        #  optional:  if  define  this  method,  it  passed  to  `command`        env:  ()-­‐>            port  =  10000

13年4月25日木曜日

Page 18: ParamTuner 東京Node学園#8

grunt-contrib-tuning✓test: simplemocha✓document: docco✓coverage: coffee-coverage

13年4月25日木曜日

Page 19: ParamTuner 東京Node学園#8

grunt-contrib-tuning✓test: simplemocha✓document: docco✓coverage: coffee-coverage

✓tuning: paramtuner

13年4月25日木曜日

Page 20: ParamTuner 東京Node学園#8

時間が余ったら✓Series.js

✓系列データに特化したモジュールを作っています(誰得)

✓ R, pandas, Octave, Matlab...

13年4月25日木曜日

Page 21: ParamTuner 東京Node学園#8

Series.js✓sum✓mean✓variance✓stdev✓covariance✓correlation✓autocovariance✓autocorrelation✓moving average✓moving variance

✓arima (現在はarのみ)

✓t-test✓smoothing✓lag✓dif

TODO:✓arima✓spectrum✓fourier transfer

13年4月25日木曜日

Page 22: ParamTuner 東京Node学園#8

Series.jsSeries  =  require  'series.js'  expect(Series.sum([0..10])).to.be.equal(55)  series  =  new  Series({bufsize:  10,  discount:  0.8}).x((d)-­‐>  d.time).y((d)-­‐>  d.val)series.push({time:  new  Date(2013,0,1),  val:  1})series.push({time:  new  Date(2013,0,2),  val:  2})series.push({time:  new  Date(2013,0,3),  val:  3})series.push({time:  new  Date(2013,0,4),  val:  4})  expect(series.mean()).to.be.equal(1.6384)  #  正確には  2.5

#  discountを変更することで、最新値と過去の重みを変更

13年4月25日木曜日

Page 23: ParamTuner 東京Node学園#8

Series.js✓d3.jsと組み合わせることで時系列データの処理・表現の両方を同一言語で処理することが可能

13年4月25日木曜日

Page 24: ParamTuner 東京Node学園#8

Series.interpolate.js✓時系列データにはだいたい欠損が入る✓欠損値をよきに埋めるモジュール✓というのを作って、いま、直しています✓d3と組み合わせることで(略

date:2013-­‐01-­‐01<TAB>val:34date:2013-­‐01-­‐02<TAB>val:26date:2013-­‐01-­‐04<TAB>val:43

13年4月25日木曜日