ブログ執筆中 このページをアンテナに追加

2009-07-25

Confidence Weightedの挙動を見てた

理論は理解したつもりになって、実装してみたは良いものの、なかなか正体が見えないので、パラメータの更新量を調査してみることにする。

ブログで上手く紹介できないかとと計算機サービスを探してみたところ、instacalcというWebサービスを発見。早速入力してみた。

http://tinyurl.com/mgo69o

M_iはmean margin。パラメータと重みの線形和。|M_i|はi番目の事例がどれだけはっきり分類されているかを解釈することができる。負であれば正解ラベルと分類されたラベルが逆。

V_iはvariance margin。事例に出てきた素性の出現回数が少ないと素性に対応する分散は大きい値になる(出現するごとに分散は小さくなっていく)ので、V_iが大きい値になるということは、事例の素性が余り出てきていないと解釈することができる。ということはV_iはi番目の事例が目新しいほど高い値を示していると考えることが出来そう。こちらは正値のみ。

Cはconficdence parameter

alphaがM_i, V_i, Cを元に算出された更新量


V_iが大きくなるとalphaも大きくなる。これは、目新しい事例だと大きく更新してやろうとする、CWの計算通り。

M_iが正値で大きくなると、alphaは0になり、M_iが負値で小さくなるほどalphaは大きい値になる。事例とラベルが同じだとほとんど更新せず、逆だと大きく更新してくれる。

また、Cが大きいとalphaも大きくなる。Cが大きくなれば更新量も大きい

以上をまとめると、分類が誤っていた時、また分類が正しかったとしても目新しい事例を受け取った時はパラメータを大きく更新し、正しくて目新しくもないときはパラメータの更新量を小さく、もしくは全く更新しないようにする、ということになる。そして、その更新量はCにより制御できる、と。解析すればするほどよくできてる分類器だということが分かる。

んーでも、正例と負例の割合が偏ってる場合はどうなるんだろう。例えば負例がすごい多くて、久しぶりに正例が出てきた場合、既に目新しくない事例だとCWに理解されて全然更新されなくなってしまうという事態がおこる可能性が十分ありうる。インスタンスの値を上手く調整してやる必要が有りそうだ。

2009-07-21

Confidence Weighted Linear ClassificationをRubyで書いてた

つい最近、機械学習勉強会Confidence Weightedを読みました。理論はラグランジュで引っかかってしまいましたが、そこ以外はつまること無く読めました。

せっかく読んだのでRubyで実装してみました。といっても、ぜんぜん難しくない。ホント実装簡単すぎる。せっかくなのでオープンソースとかで公開してみたいけれどもどうやったらいいかさっぱり。。。


勉強会では、なぜ1回で学習が収束するのかを議論にしてみました。僕は、分散の値が学習される毎に小さくなっていくため2回目以降の学習によるパラメータの更新量が小さくなるのではないかというのと、Perceptronとは異なり、分類が誤ったからといってその事例が必ず分類できるようにをするわけではないため、他の事例によって元の事例が分類できないパラメータになる可能性が低くなるのではないかと主張してみたけど、すっきり筋の通る説明になっていないのでうーんという感じ。

CWはカーネル化が難しい(moritaさん曰く)ので、そこなんとかならないかなぁと思ったり思わなかったり。

2009-01-07

機械学習が分からん

めっちゃ学術的で、分かる人にしか分からないエントリですまそ。自然言語処理を研究しているので、機械学習を勉強していますが、分からないことだらけ。

データセットをランダムにn個に分割し、そのうちn-1個を訓練データに使い、1個をテストデータに使う。訓練事例とテスト事例の分割は全部でn個あるので、すべてのパターンに対して学習→テストを行い平均(マクロ平均)をとる。こうすると事例の総数が少なくても、事例の情報を余すこと無く使うことができるため、少ない事例数でもより正確な評価ができる。これがn-fold cross validation。

トレーニングデータの数に対して、素性の数が多い場合、学習データに対して正確にフィッティングしすぎてしまい、テストデータに対して正しく分類できないことがある。これがオーバーフィッティング。オーバーフィッティングを回避する方法として正則化項を追加するという方法がある。正則化項の係数(以下正則化係数)を決定するには別データを用いて適切な係数を決める。この別データのことをディベロップメントデータと呼ぶ。正則化項は 1-normや2-normが有名。L1, L2という呼び方がされています。以前見た比較結果ではL2の方が精度が良かった。 L1の方は、多くのパラメータの値が0になる、という興味深い特徴があるようだ。

素性に対して事例が多い場合は正しくフィッティングする。

素性を多くすると、素性に対して事例が少ない場合はオーバーフィッティングする。ただし、正則化項で抑制可能。

素性を多くすると事例空間が高次元になるのでトレーニングデータの誤分類を減らすことができる。

素性・トレーニングデータが多くなると、学習に時間がかかるし、メモリも食う。

精度向上するための方法としてブースティングとかあるらしいけど、まだ勉強不足でこのあたりは良く分からない。


理論的には、だいたい分かる。・・・けど、実際に使う上でちょっと良くわからないことがある。

cross validation+ディベロップメントを使う場合

データを5分割し、トレーニングデータに3つ・ディベロップメントデータに1つ・テストデータに1つ割り振る。この場合、20パターンある。この時、二種類の方法が考えられると、無知な僕は思う

方法1

各正則化係数に対してトレーニングデータで訓練し、ディベロップメントデータで適切な正則化係数を選択する。そして、決定された正則化係数と訓練されたモデルを使いテストデータを使って評価する。これを20パターン行い、マクロ平均をとる。

方法2

テストを5回しかやらない方法。

各正則化係数に対してトレーニングデータで訓練し、ディベロップメントデータで適切な正則化係数を選択する。これを4パターン行い、各イテレート毎に算出した正則化係数の平均を取り、これを正則化係数とする。そして、決定された正則化係数と訓練されたモデルを使いテストデータを使って評価する。これを5パターン行い、マクロ平均をとる。

方法1だと、評価回数が20回なので、評価が正確になる?方法2だと正則化係数を確定するために事例の情報をフルに使っているので、精度向上になる?

これらが正しいとすれば、精度向上に寄与するので方法2を採用したいな。

素性数と事例数

速度が遅い分にはいいんだけど、メモリを食いすぎるのは処理できなくて困る。じゃあ、適切な素性の数と適切なデータ量ってなんですか?

効かない素性

前述したように素性を加えればトレーニングデータの誤分類が減る。そのため、オーバーフィッティングさえ回避すれば、性能はあがる可能性が高い。

だから、効かない素性というのは基本的に無く、素性を加えれば加えるほど性能があがると考えられる?

でも、現実にはメモリの制限があるので、ある素性を足すより、事例を増やすか、別の素性を増やした方が性能が向上する、より効かない素性というのがあるはず。

このような素性を見抜きたいのだが、その方法はあるのか?



と色々分かりません。教えてエロい人!

2008-02-24

[] 2008年2月24日のニュース

煩悩是道場http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/ululun/20080222/1203660952

tomityのドキっとした部分

" 「記事を読んでどんな感想を持ったか」を自分の為、そしてブックマークを見てくれた誰かの為にコメントを書く事がもう一つの目的 "

" そのうち「やる夫が、はてなブックマークをやるようです」というエントリでも書くかなww "


桜井政博氏が語る、『大乱闘スマッシュブラザーズX』のキャラはこうして命を吹き込まれた - ファミ通.comhttp://b.hatena.ne.jp/entry/http://www.famitsu.com/game/news/1213778_1124.html

tomityのドキっとした部分

" 肝心のキャラの選択にあたっては、キャラの個性やシリーズのバランスなどいくつか基準があるそうだが、もっとも重視しているのは「そのキャラにしかできないことがあること」。 "

" キャラクターをゲームの中で生き生きと動かすために必要になってくる要素は3つ。(1)グラフィック、(2)モーション(動き)、(3)パラメーター "

" “しっかりと伝えるため”の道具として、日ごろから“ミクロマン”(全身の30箇所以上が可動する小型のおもちゃ)を使用していることを明らかにした。 "

" 動きはモーションキャプチャーを使わずに手付けで行っている "


nani-kiru.com -&nbsp何切る 麻雀 問題 何きる 何を切る 王国 ゲーム 登録 リソースおよび情報http://b.hatena.ne.jp/entry/http://nani-kiru.com/

これは、面白いサービスだ。でもシンプルすぎて飽きそう。コメント欄欲しいよな。はてブでコメントつけられるとかあったら面白い?w


404 Not Found | このページは存在しないか、すでに削除されていますhttp://b.hatena.ne.jp/entry/http://alfalfa.livedoor.biz/archives/51242950.html

tomityのドキっとした部分

" ゼーレまでも利用し、ついに彼は神と等しき存在となったのであった。 "

" 「まだ補完されたくないぃいぃいいいぃい!!うわあああああああああああああああ!!!!!」 "

<id:BigHopeClasic>謀略系ならすごい見たい


はてブ読むならRSSリーダで。 - plotの日記http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/plot/20080222/1203699651

ですよねー


ページが見つかりません:@niftyhttp://b.hatena.ne.jp/entry/http://tetugakuboya.cocolog-nifty.com/test/2008/02/post_83d6.html

tomityのドキっとした部分

" 男にとって結婚はゴールですが、女は結婚がスタート "

<http://b.hatena.ne.jp/entrylist>残酷なことですね


はてブの向こう側を見る人: 304 Not Modifiedhttp://b.hatena.ne.jp/entry/http://maname.txt-nifty.com/blog/2008/02/hatebufav.html

tomityのドキっとした部分

" 発信者としての私は、たくさんの人に見てもらうよりも、 "

" しっかり見てくれる人に自分を見てもらいたいのです。 "


Twitterの便利さは人間のすごさにある - インターネットの真の姿とはhttp://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/qaze00/20080223/1203710358

tomityのドキっとした部分

" ハイスペックコンピュータである人間と、数十台から数千台(follow数)つながっている "

<id:hejihogu>なるほど。


はてなダイアリーhttp://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/tragedy/20080222/p1

tomityのドキっとした部分

" ウェブに情報を発信してる人の割合がIT業界の人ばかりだから "

" 自分に投資して人脈を広げていけば必ず金銭という形でリターンのある業界 "

<id:hejihogu>オチにワロタ


使用ツール

tomityのブログ - はてなスター

はてなブックマーク - tomityのブックマーク


-----------------

sent from W-ZERO3

2007-12-23

[]カードヒーローはまりすぎ

昨日到着したカードヒーローをとりあえずクリアしました。

ただクリアの早い人というのはやっぱり居るもので、WiFi対戦でレアカードの嵐の人と当たってぼろぼろにされてきました(笑


やはりカードヒーローはお薦めです。まずルールが面白い。ルールについてはWikipediaの旧作を見ていただきたい。ただそれ以上に、俺がカードヒーローを薦める理由はルールの面白さだけじゃなくて、初心者ユーザーないしライトユーザーへの配慮にあります。


普通、ポケモンのようなキャラクターを育てて対戦するタイプの通信対戦では如何にやりこんでいるかだけで勝敗が決まってしまうことが良くあります。どれだけ多くのパターンに対応できる戦略を考えられているかではなく、時間を大量にかけることで、相手とのパラメーターに差をつけ、力技で勝ってしまうというライトユーザーにしてみれば、つまらない展開になりがちです。

カードヒーローもレアカードが出にくいので、そのあたりのやりこみ要素は確かにあります。しかしながら、対戦のバリエーションとして、ことWiFi対戦においては、カードごとについている希少性の度合いを表すレア度に制限を付けて戦うことができます。そのため、あまりカードをそろえていないプレイヤーでも、ある程度プレイしてさえいればそろえられるレア度以下のカードのみを使った対戦などに参加する分にはプレイ時間に左右されずに戦うことができるので、他のゲームに比べて良心的。

一緒にカードヒーローやりましょう

高速カードバトル カードヒーロー

高速カードバトル カードヒーロー