主成分分析編といいつつ、シミュレーションの発表とかやってきました。多変量解析期待してた人はごめんなさい><。知ってる人は知ってたかもしれませんが、遺伝的アルゴリズムの発表のほうはRejectセキュリティ&プログラミングキャンプの時に僕が作ったやつです。一緒にやっていた@shinsuke_さんもいたからそっちの紹介もすればよかったかなと思いつつ、てんぱってて忘れてましたw。
タカハトゲームは自分で勉強した時から2年もたっていたので、金曜日に団長に教えてもらってました。ありがとう。
Rで学ぶ多変量解析【主成分分析編】
自己紹介
- id:syou6162
- syouでおk
- Tsukuba大学の4年生
- 統計やっている研究室に所属
今まででやってきたこと
最近はまじめなこともやっているらしい
- 卒研やば(ry
- ノンパラメトリック回帰
- 制約をぶっぱずせ!!
Tsukuba.Rの首謀者
Tsukuba.Rって何?
- Rubyのコミュニティがうらやましーなーと思って立ち上げた
- こんな人が集まるといいなー
- 「データ解析とか統計とかやりたいんだけど、Rって難しいのかなあ」
- 「統計とかデータマイニングとかやってるんだけど、なんか実際にサクサク作りたい」
- 「統計とかどうでもいいんだけど、Rって言語として結構面白いって聞いたんだけどw」
今日のお題
- 主成分分析
- 解析自体も思い出さないと><
- データ必要
- やば、時間がな(ry
お題変更
Rで学ぶ多変量解析【主成分分析編】
Rで学ぶシミュレーション入門
今日話すこと
- 進化ゲーム理論
- Evolutionarily Stable Strategy(進化的に安定な戦略)
- 遺伝的アルゴリズム
伝えたいこと
- 「Rでもこういうことができるのか」
- Rでこういうことやる人増殖計画
What is 進化ゲーム理論?
- その前にゲーム理論
- ナッシュ均衡、囚人のジレンマが有名
ゲーム理論(ゲームりろん)とは、複数の主体の存在する状況下での意思決定について研究する、20世紀半ばに確立された数学の一分野であり、「理論」の名を冠してはいるが単一の理論ではなく通常学問の分野や研究のアプローチだとされる。経済学、オペレーションズリサーチ、経営学、心理学、生物学、社会学、法学、政治学、論理学などと密接な関わりを持つ。
よく分からない…
- 実例を見てみよう
- 囚人のジレンマ
- タカハトゲーム
囚人のジレンマ
- 利得表→wikipedia:囚人のジレンマ
- Which strategy would you choose?
囚人B 黙秘 | 囚人B 自白 | |
---|---|---|
囚人A 黙秘 | (2年、2年) | (15年、1年) |
囚人A 自白 | (1年、15年) | (10年、10年) |
タカハトゲーム
誠実 | 裏切り | |
---|---|---|
誠実 | (V/2,V/2) | (V,0) |
裏切り | (V,0) | ((V-C)/2,(V-C)/2) |
V=2、C=5の時
誠実 | 裏切り | |
---|---|---|
誠実 | (1,1) | (2,0) |
裏切り | (2,0) | (-1.5,-1.5) |
ESS
戦略Xを採用している母集団に戦略Yを採用している個体が侵略してくるとする。 その母集団内でゲームを行い、得点が高い個体が生き残るとしよう。 戦略XがESSとは、X以外の、いかなる戦略Yによっても侵略されないということである。
均衡点はどこ?
- 戦略を選択、変更できる場合、もとの母集団は戦略Yに切り替えていくはず
- 多くの場合、戦略Yを取る方の得点は低くなり、結局は戦略Xと戦略Yがある割合を取って釣り合う
- ある割合?
Rでの実装の仕方
- (使う必要ないけど)、S4で書いた
- S4はRでのオブジェクト指向をやるためのもの
- S3とかもあるけど、S4のほうが新しい
ソースの一部
- ToDo:説明
setGeneric("calcUtilVsDove", function(this) standardGeneric("calcUtilVsDove")) setClass("dove",representation(v="numeric",c="numeric")) setMethod("calcUtilVsDove","dove",function(this){ return(this@v/2) }) new("dove",v=1,c=9) calcUtilVsHawks(new("dove",v=1,c=9))
シミュレーションの結果
理論ではどうなっているのか?
- V > Cの時
- ハト全滅しちゃう><
- 確率1でタカ、がESS
- V < Cの時
- 確率V/Cでタカ、がESS
もう一つくらいやってみた
- 時間が大丈夫ならば
遺伝的アルゴリズム
- wikipedia:遺伝的アルゴリズム
- 最適化問題を解くためetcに使われる
- 適応度の高いのが生き残っていく
- この辺タカハトゲームと似ている
遺伝的アルゴリズムはデータ(解の候補)を遺伝子で表現した「個体」を複数用意し、適応度の高い個体を優先的に選択して交叉(組み換え)・突然変異などの操作を繰り返しながら解を探索する。適応度は適応度関数によって与えられる。
こういう構造をしている
突然変異
- 突然変異は一つの木を受け取る
- それをちょっと変更するという操作をする
- サブツリーがごっそリ変わる時もあるし、全く変更しない時もある
- 突然変異が起こる割合はあんまり高すぎないほうがいいらしい
- 突然変異が起こらなすぎても、多様性が保てなくなるので、そこら辺の調整が必要
- 多様性→あとで話す
交叉
- 二つの木を受け取って、それらを組み合わせて、新しい木を作る
- 二つの木はなるべく成功しているものが組み合わせられる
- 成功しているもの同士を組み合わせると、もっといいものができるだろう
多様性
これを数世代繰り返していく
- x^2 + 3x + 2y + 5を表現するような構造を作らせたい
- 一例としてこんな構造ができる
- 再帰をかなり使うので、計算時間が結構かかる
add add add if subtract p1 add p1 p0 p1 p1 5 add p1 subtract p0 subtract subtract subtract isgreater p0 p0 p0 0 p0 multiply p0 p0
結果
- 求めたい関数:x^2 + 3x + 2y + 5
- 求めた関数:x^2 + 4x + y + 5
- まあ、いいんじゃない?
コード
その他シミュレーション以外なもの
やろうぜ!!1
まとめ
- Rでも色んなシミュレーションやってみたよ!!
- 進化ゲーム(ESS)
- 遺伝的アルゴリズム
- Rだと簡単に実装できて、キレイにplotできて自己満足に浸れるよ!!
- みんなもやってみよう!!