SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Param Tuner
@muddydixon
東京Node学園 8時限目
13年4月25日木曜日
お詫び
✓ParamTunerの話だけでは尺が持たなかった
ので最近作ったあれこれの話を含めます
13年4月25日木曜日
me
✓Data Science
✓DataVisualization
✓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 module
Tuner	
  =	
  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 module
Tuner	
  =	
  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で使えます!
✓multitask
tuning:
	
  	
  #	
  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.js
Series	
  =	
  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:34
date:2013-­‐01-­‐02<TAB>val:26
date:2013-­‐01-­‐04<TAB>val:43
13年4月25日木曜日

Mais conteúdo relacionado

Destaque

オレオレMultipleInputを作る方法
オレオレMultipleInputを作る方法オレオレMultipleInputを作る方法
オレオレMultipleInputを作る方法Daichi Morifuji
 
Time Series Analysis by JavaScript LL matsuri 2013
Time Series Analysis by JavaScript LL matsuri 2013 Time Series Analysis by JavaScript LL matsuri 2013
Time Series Analysis by JavaScript LL matsuri 2013 Daichi Morifuji
 
企業と勉強会 @nifty エンジニアサポート
企業と勉強会 @nifty エンジニアサポート企業と勉強会 @nifty エンジニアサポート
企業と勉強会 @nifty エンジニアサポートDaichi Morifuji
 
BigData Analysis with mongo-hadoop
BigData Analysis with mongo-hadoopBigData Analysis with mongo-hadoop
BigData Analysis with mongo-hadoopDaichi Morifuji
 
Html5j data visualization_and_d3
Html5j data visualization_and_d3Html5j data visualization_and_d3
Html5j data visualization_and_d3Daichi Morifuji
 
Io t縛りの勉強会 #4
Io t縛りの勉強会 #4Io t縛りの勉強会 #4
Io t縛りの勉強会 #4Daichi Morifuji
 
データ可視化勉強会
データ可視化勉強会データ可視化勉強会
データ可視化勉強会Daichi Morifuji
 
neural network introduction yapc asia tokyo
neural network introduction yapc asia tokyo neural network introduction yapc asia tokyo
neural network introduction yapc asia tokyo Daichi Morifuji
 

Destaque (11)

オレオレMultipleInputを作る方法
オレオレMultipleInputを作る方法オレオレMultipleInputを作る方法
オレオレMultipleInputを作る方法
 
Time Series Analysis by JavaScript LL matsuri 2013
Time Series Analysis by JavaScript LL matsuri 2013 Time Series Analysis by JavaScript LL matsuri 2013
Time Series Analysis by JavaScript LL matsuri 2013
 
企業と勉強会 @nifty エンジニアサポート
企業と勉強会 @nifty エンジニアサポート企業と勉強会 @nifty エンジニアサポート
企業と勉強会 @nifty エンジニアサポート
 
BigData Analysis with mongo-hadoop
BigData Analysis with mongo-hadoopBigData Analysis with mongo-hadoop
BigData Analysis with mongo-hadoop
 
20151030 ux sketch vol5
20151030 ux sketch vol520151030 ux sketch vol5
20151030 ux sketch vol5
 
Html5j data visualization_and_d3
Html5j data visualization_and_d3Html5j data visualization_and_d3
Html5j data visualization_and_d3
 
Io t縛りの勉強会 #4
Io t縛りの勉強会 #4Io t縛りの勉強会 #4
Io t縛りの勉強会 #4
 
Jubatus casulatalks2
Jubatus casulatalks2Jubatus casulatalks2
Jubatus casulatalks2
 
データ可視化勉強会
データ可視化勉強会データ可視化勉強会
データ可視化勉強会
 
Gtug girls-20140828
Gtug girls-20140828Gtug girls-20140828
Gtug girls-20140828
 
neural network introduction yapc asia tokyo
neural network introduction yapc asia tokyo neural network introduction yapc asia tokyo
neural network introduction yapc asia tokyo
 

Semelhante a ParamTuner 東京Node学園#8

Terraform始めました
Terraform始めましたTerraform始めました
Terraform始めましたw1mvy pine
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)Takuya Tsuchida
 
Net opscoding#4発表資料
Net opscoding#4発表資料Net opscoding#4発表資料
Net opscoding#4発表資料Kenta Hattori
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psqlToshi Harada
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたNarami Kiyokura
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプトbsdhack
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 
エンジニア知識共有会発表資料 20090910
エンジニア知識共有会発表資料 20090910エンジニア知識共有会発表資料 20090910
エンジニア知識共有会発表資料 20090910ngi group.
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指してbleis tift
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigiComplex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigiSATOSHI TAGOMORI
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 
Aerospike v3 install
Aerospike v3 installAerospike v3 install
Aerospike v3 installMakoto Uehara
 

Semelhante a ParamTuner 東京Node学園#8 (19)

Terraform始めました
Terraform始めましたTerraform始めました
Terraform始めました
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
 
Net opscoding#4発表資料
Net opscoding#4発表資料Net opscoding#4発表資料
Net opscoding#4発表資料
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
Processing
ProcessingProcessing
Processing
 
ALPSチュートリアル(3) アプリケーション実習
ALPSチュートリアル(3) アプリケーション実習ALPSチュートリアル(3) アプリケーション実習
ALPSチュートリアル(3) アプリケーション実習
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
エンジニア知識共有会発表資料 20090910
エンジニア知識共有会発表資料 20090910エンジニア知識共有会発表資料 20090910
エンジニア知識共有会発表資料 20090910
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
ALPSチュートリアル(5) ALPS Python入門
ALPSチュートリアル(5) ALPS Python入門ALPSチュートリアル(5) ALPS Python入門
ALPSチュートリアル(5) ALPS Python入門
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigiComplex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
Aerospike v3 install
Aerospike v3 installAerospike v3 install
Aerospike v3 install
 

ParamTuner 東京Node学園#8