Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jubatusにおける機械学習のテスト @Machine Learning Casual Talks

Jubatusにおける機械学習のテスト @Machine Learning Casual Talks

Yuya Unno

June 06, 2014
Tweet

More Decks by Yuya Unno

Other Decks in Technology

Transcript

  1. 各モジュールの役割 l  サーバー・クライアント l  msgpack-rpcサーバー・クライアントとして振る舞る l  だいたい⾃自動⽣生成される l  ドライバー l 

    ⽣生データ(⽂文書など)を処理理する層 l  特徴抽出、重み付け、学習を結びつける役割 l  コア l  ベクトルを受け取る⽣生の学習器 l  ベクトルを⽣生成する⽣生の特徴抽出器 l  最近リポジトリを分離離した(jubatus_core) 6
  2. テストを書いてみた・・ l  Perceptron l  正解率率率:95% l  Passive Aggressive l  正解率率率:97%

    l  Confidence Weighted l  正解率率率:98% l  AROW l  正解率率率:98% l  NHERD l  正解率率率:70% 13
  3. Crammer系⼿手法のおさらい 17 initialize w, ∑" for (x, y) in data:"

    #m = y (x・w)" #if m < e:" # #w := w + αy∑x" # #update ∑" l  ベースのアルゴリズムはシンプル l  各⼿手法は、上記のe, α, ∑だけが違う
  4. 雰囲気だけ・・・ 19 void normal_herd::update( const common::sfv_t& sfv, float margin, float

    variance, const string& pos_label, const string& neg_label) { for (common::sfv_t::const_iterator it = sfv.begin(); it != sfv.end(); ++it) { // 中略略 storage_->set2(feature, pos_label, storage::val2_t(pos_val.v1 + (1.f - margin) * val_covariance_pos / (val_covariance_pos * val + 1.f / C), 1.f / ((1.f / pos_val.v2) + (2 * C + C * C * variance) * val * val))); if (neg_label != "") { storage_->set2(feature, neg_label, storage::val2_t(neg_val.v1 + (1.f - margin) * val_covariance_neg / (val_covariance_neg * val + 1.f / C), 1.f / ((1.f / neg_val.v2) + (2 * C + C * C * variance) * val * val))); } } } この中に⼀一箇所だけ+と­−を間違えています
  5. 正直すまんかった @@ -38,7 +38,7 @@ void PA::train(const sfv_t& sfv, const

    string& label) {" if (sfv_norm == 0.f) {" return;" }" - update_weight(sfv, loss / sfv_norm, label, incorrect_label);" + update_weight(sfv, loss / (2 * sfv_norm), label, incorrect_label);" }" " string PA::name() const { 23
  6. みんな⼤大好き-cオプション l  「Cいくつにした?」と聞かれる l  正則化項と損失の⽐比率率率を調整する重みのこと 26 % svm-train" Usage: svm-train

    [options] training_set_file [model_file]" options:" ..." -c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)" ...
  7. 直しました --- a/src/classifier/arow.cpp" +++ b/src/classifier/arow.cpp" @@ -40,7 +40,7 @@ void

    AROW::train(const sfv_t& sfv, const string& label){" if (margin >= 1.f) {" return;" }" - float beta = 1.f / (variance + config.C);" + float beta = 1.f / (variance + 1.f / config.C);" float alpha = (1.f - margin) * beta; // max(0, 1- margin) = 1-margin" update(sfv, alpha, beta, label, incorrect_label);" } 34
  8. まとめ l  「ちゃんと」問題が解けるか l  解けそうな問題を解けるか l  簡単な問題にヒドイ間違いをしないか l  「ちゃんと」論論⽂文通りか l 

    数式はちゃんと写しているか l  確認する⽅方法は・・・頑張れ・・・ l  「ちゃんと」使えるか l  設定は⼗十分意味が伝わり、⼀一貫性が有るか l  挙動を制御しやすいか 42