「異端の統計学 ベイズ」を読んだ。

購入のきっかけはタイトル買い。
ベイズと付いてたら買わなければならない病気にかかっているので。

内容

 ベイズ統計が過去歴史の中で、どのような取り扱われ方をしてきたのかを紹介するもの。 塩野七生が書く系のジャンル。なんていうのあれ、歴史エッセイ?
もう少し言うと、ベイズ則とそれを下敷きにした道具立てに関わった人となり、
各時代におけるベイジアン的発想のの扱われ方、具体的な応用事例とその成功についての紹介。

良いと思ったところ

 類書は無さそうに思う。よく頻度主義、ベイズ主義みたいな話を耳にするが、
具体的に過去にどういう論争があったのか、どういう経緯で発展してきたのかを知らずに
ベイズの道具を使うことになってしまった、というようなタイプの方には良いと思う。

気になったところ

 無駄に厚く、文章が読みにくい。これは翻訳のせいではなくて、原文のせいだと思う。

 要所要所で、事前確率等の専門用語の説明がさわり程度というか、妙だ。そのため、なんだかわかったような分からないような…というようなという感じのまま、しかし理解している前提で話が進んでいく。そのため、後の文章でこれには批判があった、というようなことが書かれていても、一体どこを問題にしているのかが大変わかりにくい、または分からないということが何度かあった。
たとえば、ギブスサンプラーの解説はこう。

ギブズ・サンプラーマルコフ連鎖モンテカルロ法の一種。変数がたくさんある場合に、各ステップでただ一つの変数に注目するという形で、順次着目する変数を変えてサンプリングを繰り返す

これは分かっている人向けの説明だし、この説明の前にMCMCの話は出ていないため、最初の一行が既に無意味。一体だれのための説明なのか、そもそも歴史エッセイにこのような説明が必要なのか、と首をかしげてしまう。よって、この分野全然知らない人には勧められない。

 また、行きがけの駄賃と言わんばかりに解説のない専門用語、些細なエピソードを、「ついでに」挟んだような文章が頻繁にある。ベイズというキーワードに共起する専門用語を文章中に必ず含めなければいけない呪いにでもかかっているのだろうか。調べた内容はすべて書かないといけないと思っているのだろうか。

 これらが無ければ1/3くらいの厚さの本になっていただろう。この点は、先述の点と相乗効果を発揮し、読みにくさに拍車をかけている。

まとめ

 厚いし読みにくいので読了までの時間が長く、コスパが低い。
扱っている内容は良いと思うので、関連する分野の人で時間に余裕のある人は読んでもいいかも。

 ところで「異端」という言葉を煽りに使いたかったのかな、という勘ぐりをしたくなるくらい邦題と原題は違う。
原題は以下。こちらの方が内容とあっていると思う。

The Theory That Would Not Die: How Bayes' Rule Cracked the Enigma Code, Hunted Down Russian Submarines, and Emerged Triumphant from Two Centuries of Controversy

とはいえ、タイトル買いしてしまった自分には商業主義を呪うことくらいしかできない。

「統計学 (サイエンス・パレット)」読んだ。

単なる読書メモ。
購入のきっかけは、訳者が上田さんだからというわりとしょうもない理由。
想定読者は統計初学者/やりなおしのあたりと推定。

内容を三行でまとめると、
  • 統計の考えの部分に重点を置いて
  • その都度分かりやすい例を挙げながら一切の数式を用いず
  • 統計の基礎的諸概念と動機について解説してる
良いと思ったところ

本当に基礎の基礎だけど、諸概念の説明と例示がされていて、何もかもが分かりやすい。
訳文も大変読みやすく、あわててその辺の素人を捕まえて無理矢理訳させたようなものが散見される昨今、珍しいくらい良心的だと思った。
また、ベイズ的な考え方についてもきちんと押さえていて、紹介のタイミングもよく(例えば点推定の説明の際に)動機に納得がいきやすい。
後半ではGLMやHMM、ブートストラップやMCMCのような比較的高度(?)な道具立てについてもごく触り程度だが紹介されている。
これは、読者が各人の興味や必要に応じて、それらのキーワードを元に次のステップへ進みやすいようにとの配慮だろう。
大変良い本。これから統計を道具として使う為に学ぶというなら、このような考え方と動機に重点を置いた本を先に読むか、併読した方が有益な結果が得らるように思った。

少し気になったところ

数式にアレルギーが無い人にとっては、数式無しは逆に辛かろうと思う。
文字いっぱいで少しのことを言うのに結構言葉を尽くしているのだけれど裏目に出る層はいると思う。 多分そういう人は想定読者じゃないので、読んでも仕方が無いかもしれない。
また、後半の高度な道具立てのあたりはキーワードの羅列気味になっていて少し押し込め過ぎかなぁとも思った。

総括

とても良い本と感じた。このように動機と考え方に根ざした書籍だと、
最近読んだ「エンジニアの為のデータ可視化[実践]入門」もその類いかと思う。そちらも良い本。
ただし、(Ω, F, P)の三つ組みと日夜戦ってらっしゃる方々とってはあまり意味が無いですよ、と。

類書の煽り文句に負けず、マジョリティを獲得して欲しいなと思いましたとさ。

25Mar2014

もはや黒歴史と化したはてなダイアリーの記事群をHatena Blogにインポートした。

広告がうっとうしすぎるのでBloggerにでも移行しようかと思った。

ついでにGibbs samplerもcanvasで書いてみる

MetropolisがGibbsと並んで有名って言うなら、Gibbsもやってみなければいけない。
というわけでやってみた。


ここであそべる


おおー。たのしい。


ただ、無相関の2変量ガウスでこれをやっても楽しさ半減ですね…

MetropolisサンプラーをHTML5のcanvasで描いてみる

MCMCの中でもGibbs samplerと並んで有名なMetropolis samplingをjsでやってみる。
HTML5canvasを使って視覚化もしてみる。


このへんであそべる

赤いところがAcceptされたサンプル、青いのがRejectされた動き
moreで1ステップとか2ステップづつ進むとニョロニョロ動いて楽しい。


対象は相関のない2変量ガウス(正規)分布。
乱数生成器はMath.random()なので、本当はサンプラーに使うべきではないですが、どの道モックなので気にしない。

切符の番号とかナンバープレートの4つの数字と+−×÷を使って10を作るアレを解いてみる

 切符にプリントされている4個の数字とか、ナンバープレートに書かれている4桁の数字を、四則演算のみを使って10にするという遊びあるじゃないですか。

そう、あれ。あれです。誰か名前を付けていてもよさそうなんだけど、特別名前が付いている訳でもなさそうなあれ。


 どうも海外では、これと似たようなゲームを出題するTV番組があったらしく、そこからCountdown numbers gameという名前で呼ばれているらしいです。
ルールはもうちょっと複雑で、数字が6個だったり、10にするんじゃなくて、その都度違ったり、時間制限があるとか。


 これを計算機で解く場合、おそらく一番単純な方法は、葉ノードが数字、接点が演算子の木を全通り出力 → 評価という流れかと。
そういうわけで、実装してみた。例によってJavaScriptです。



このへんであそべる


 遊び方は見たまんま。
 計算したい条件(ナンバープレートの数字と、作りたい10という数字)を入力すると、可能な計算式が全て出ます。4つの数字以上にも対応、途中計算で分数が出てくるものも解として出力します。



 大昔に、auの携帯向けのフリーアプリで、まさにこの問題をプレイヤーに解かせるというゲームがあったのですが、困ったことに、自力で解けないときに回答が出てこない(すごいストレス)&なんか解けそうに無い問題が出てくる(理不尽)という代物で、非常に不満だったのですが、これがあれば万事解決。


 これを使えば暇なドライブでどうしても解けないナンバープレートを見つけたときに、「解なし」と自信たっぷりにいえる、その快感に酔いしれること請け合いです。


 GWの単調なドライブのお供に是非。




追記

 10 puzzle とか Make 10とかいうらしい。解く前にググれ、か。

モンテカルロ法とJavaScriptでπ

 これはもう説明が全く不要な、コード書く人なら間違いなく通る、モンテカルロシミュレーションでπの値を計算しようという遊び。
これはとても楽しい。視覚化されると楽しさ10倍。というわけでわりと投げやりにJavaScriptで書いた。



ここであそべる



画像にあるサンプル点は全て1個1個がdivなので、1万サンプルとかやると真面目に死にますので気をつけて。
あと、計算誤差については何も考慮せず作ったので、ある程度の精度以上は出ません。というか、非常に精度が悪い。


電車内で暇に任せてiPod Touchで書いたコードに枝葉を死ぬほどつけたらなんかできたのでとりあえず公開。

括弧対応をとる

一瞬必要だったので。corr_tableをいじればどんな組でも可。括弧の交差はダメ。

var corr_table = { '(' : ')', '[' : ']' };
function checkBrackets( t ){
	var stack = [];
	for( var i = 0; i < t.length; ++i ){
		for( var j in corr_table ){
			if( t[i] == j ){
				stack.push( j );
				break;
			} else if( t[i] == corr_table[j] ){
				if( stack.pop() != j ){
					return false;
				} else {
					break;
				}
			}
		}
	}
	return stack.length == 0;
}

ん?はてダってカテゴリつけないとだめなん・・・?

迷路生成器と迷路解き器

 解き器って。

 折角迷路生成器を作ったなら、ソルバ(逃げた)も書いたほうが楽しい。というわけで作った。



例によってこの辺で遊べる


生成はみんな大好き深さ優先、ソルバは普段あまりお目にかかりにくい幅優先。学生のお勉強にはもってこいですね。社会人のやることではない。ない。

加えて、生成器は生成の様子が分かるようにぐりぐり動くように改造されてしまった。
ここまでやったら次はA*か。

コードはびっくりするほど汚い!



どうもhatenaではiframeを日記に突っ込む方法があるらしいのでそれを貼り付けられれば一番いいのだけど、これに限って言えば描画をサボっていてかなり重いのでどの道無理。

迷路生成器

 そんな分野があるなんて。


楽しすぎるぜ。というわけで作った。


このへんであそべる

ごくごく単純な深さ優先探索。recursive backtrackerとかなんだかかっこいい名前で呼ばれている。必殺技みたいだ。
やっぱりこの手のものは視覚的に見えると楽しいなあ。