OPEN HOUSE 2014...OPEN HOUSE 2014 フリーフード & フリードリンク 出展: 岡田蘭園、北軽ガーデン、太陽園芸、フジ・ナーセリー 東京オーキット・ナーセリー
ParamTuner 東京Node学園#8
-
Upload
daichi-morifuji -
Category
Documents
-
view
997 -
download
1
Transcript of ParamTuner 東京Node学園#8
Param Tuner@muddydixon
東京Node学園 8時限目
13年4月25日木曜日
お詫び✓ParamTunerの話だけでは尺が持たなかったので最近作ったあれこれの話を含めます
13年4月25日木曜日
me✓Data Science✓Data Visualization
✓working @ Nifty
13年4月25日木曜日
最近作ったあれこれ✓ParamTuner✓grunt-contrib-tuning✓Series.interpolate.js✓Series.js ←イマ作ってる
✓全体的に改善・時系列のあれこれです
13年4月25日木曜日
Param Tuner✓パラメタ空間を定義✓Strategyを選択✓パラメタ空間の中で試行✓bestな解を取り出してくれる✓binもあります
13年4月25日木曜日
Strategy✓現在実装済みなのは、Greedyのみ✓ つまりランダムで施行して良い結果を選択
✓GeneralizeLinearModel(線形モデル)は間に合いませんでした m( _ _ )m
✓ サンプル点からモデルを作成し、極小点を探索する戦略
13年4月25日木曜日
Param Tuner bin{ "params": { "alpha": { "range": [0, 1] } }, "command": "echo $RANDOM", "report": { "type": "json", "filename": "./report.json" } }
plan.json
13年4月25日木曜日
Param Tuner bin% ./bin/tuner -‐p ./example/plan.json
13年4月25日木曜日
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日木曜日
Param Tuner bin{ "params": { "alpha": { "range": [0, 1] } }, "command": "echo $RANDOM", "report": { "type": "json", "filename": "./report.json" } }
plan.json
パラメタ空間の定義
13年4月25日木曜日
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日木曜日
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日木曜日
Param Tuner module✓moduleとして利用するときにはいくつかの機能を利用できます✓prepare✓ 施行探索前に実施する(データのロードなど)
✓env✓ 施策ごとに環境を変えることができる✓ サーバのポートなど
13年4月25日木曜日
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日木曜日
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日木曜日
Param Tuner module✓Todo✓ Strategyの追加
❖ 特に一般線形モデル作ったら気持ちよさそう
✓ grunt-contrib-tuning (現在はやっつけ)❖ このmoduleを利用した形に変更する❖ さっきやりました
13年4月25日木曜日
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日木曜日
grunt-contrib-tuning✓test: simplemocha✓document: docco✓coverage: coffee-coverage
13年4月25日木曜日
grunt-contrib-tuning✓test: simplemocha✓document: docco✓coverage: coffee-coverage
✓tuning: paramtuner
13年4月25日木曜日
時間が余ったら✓Series.js
✓系列データに特化したモジュールを作っています(誰得)
✓ R, pandas, Octave, Matlab...
13年4月25日木曜日
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日木曜日
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日木曜日
Series.js✓d3.jsと組み合わせることで時系列データの処理・表現の両方を同一言語で処理することが可能
13年4月25日木曜日
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日木曜日