ParamTuner 東京Node学園#8

1,487 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,487
On SlideShare
0
From Embeds
0
Number of Embeds
41
Actions
Shares
0
Downloads
3
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

ParamTuner 東京Node学園#8

  1. 1. Param Tuner@muddydixon東京Node学園 8時限目13年4月25日木曜日
  2. 2. お詫び✓ParamTunerの話だけでは尺が持たなかったので最近作ったあれこれの話を含めます13年4月25日木曜日
  3. 3. me✓Data Science✓DataVisualization✓working @ Nifty13年4月25日木曜日
  4. 4. 最近作ったあれこれ✓ParamTuner✓grunt-contrib-tuning✓Series.interpolate.js✓Series.js ←イマ作ってる✓全体的に改善・時系列のあれこれです13年4月25日木曜日
  5. 5. Param Tuner✓パラメタ空間を定義✓Strategyを選択✓パラメタ空間の中で試行✓bestな解を取り出してくれる✓binもあります13年4月25日木曜日
  6. 6. Strategy✓現在実装済みなのは、Greedyのみ✓ つまりランダムで施行して良い結果を選択✓GeneralizeLinearModel(線形モデル)は間に合いませんでした m( _ _ )m✓ サンプル点からモデルを作成し、極小点を探索する戦略13年4月25日木曜日
  7. 7. Param Tuner bin{        "params":  {                "alpha":  {                        "range":  [0,  1]                }        },        "command":  "echo  $RANDOM",        "report":  {                "type":  "json",                "filename":  "./report.json"        }        }plan.json13年4月25日木曜日
  8. 8. Param Tuner bin%  ./bin/tuner  -­‐p  ./example/plan.json13年4月25日木曜日
  9. 9. 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.5529168925713748report.json13年4月25日木曜日
  10. 10. Param Tuner bin{        "params":  {                "alpha":  {                        "range":  [0,  1]                }        },        "command":  "echo  $RANDOM",        "report":  {                "type":  "json",                "filename":  "./report.json"        }        }plan.jsonパラメタ空間の定義13年4月25日木曜日
  11. 11. Param Tuner bin{    "params":  {        "alpha":  3.5,  //  const        "beta":  {            "range":  [0,  10]  //  range  [begin,  end]        },        "gamma":  {            "enum":  [1,  3,  6,  9]  //  enumerate  [items]        }    }}params13年4月25日木曜日
  12. 12. 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日木曜日
  13. 13. Param Tuner module✓moduleとして利用するときにはいくつかの機能を利用できます✓prepare✓ 施行探索前に実施する(データのロードなど)✓env✓ 施策ごとに環境を変えることができる✓ サーバのポートなど13年4月25日木曜日
  14. 14. Param Tuner moduleTuner  =  require  paramtunertuner  =  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から取得などUsage13年4月25日木曜日
  15. 15. Param Tuner moduleTuner  =  require  paramtunertuner  =  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()Usage13年4月25日木曜日
  16. 16. Param Tuner module✓Todo✓ Strategyの追加❖ 特に一般線形モデル作ったら気持ちよさそう✓ grunt-contrib-tuning (現在はやっつけ)❖ このmoduleを利用した形に変更する❖ さっきやりました13年4月25日木曜日
  17. 17. 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  =  1000013年4月25日木曜日
  18. 18. grunt-contrib-tuning✓test: simplemocha✓document: docco✓coverage: coffee-coverage13年4月25日木曜日
  19. 19. grunt-contrib-tuning✓test: simplemocha✓document: docco✓coverage: coffee-coverage✓tuning: paramtuner13年4月25日木曜日
  20. 20. 時間が余ったら✓Series.js✓系列データに特化したモジュールを作っています(誰得)✓ R, pandas, Octave, Matlab...13年4月25日木曜日
  21. 21. Series.js✓sum✓mean✓variance✓stdev✓covariance✓correlation✓autocovariance✓autocorrelation✓moving average✓moving variance✓arima (現在はarのみ)✓t-test✓smoothing✓lag✓difTODO:✓arima✓spectrum✓fourier transfer13年4月25日木曜日
  22. 22. 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日木曜日
  23. 23. Series.js✓d3.jsと組み合わせることで時系列データの処理・表現の両方を同一言語で処理することが可能13年4月25日木曜日
  24. 24. Series.interpolate.js✓時系列データにはだいたい欠損が入る✓欠損値をよきに埋めるモジュール✓というのを作って、いま、直しています✓d3と組み合わせることで(略date:2013-­‐01-­‐01<TAB>val:34date:2013-­‐01-­‐02<TAB>val:26date:2013-­‐01-­‐04<TAB>val:4313年4月25日木曜日

×