集合知プログラミングよりメモ

(2009/2/10追記:書棚ブログからリンクした)
とりあえず、重要そうなところを読んでみた。

集合知プログラミング

集合知プログラミング


個別にストーリを追ってノウハウを説明している9章まではパス。

  • 10章:データマイニング:Non-negative Matrix Factorizationは結構かっこいいけど、本当に役に立つのかちょっと疑問
  • 11章:遺伝アルゴリズムによる進化シミュレーション:ちょっと軽い
  • 12章、付録:アルゴリズムのまとめ:これだけでこの本終わっていいかも(汗

ベイジアンフィルタ(6章)

ベイズ確率(条件付確率)P(A|B) = P(A∪B)/P(B) ←いつもAとBの順番を間違ってしまう俺

  • PROS:incremental(データの追加に対応しやすい)
  • CONS:得られた判定基準の情報を外部に取り出しにくい

決定木(7章)

  • PROS:できた決定木を利用するのが簡単(条件文のnestにすぎない)。PRに使いやすい。
  • CONS:データが追加されたときに対応しずらいため、SPAM分類を持続的に精度を向上させていくような用途には向かない。

Neural Network(4章)

  • PROS:incrementalである:back propergationで、失敗した判定結果につながるneuronの重みを下げるだけで学習できる
  • CONS:学習結果を外部に取り出せない:パラメトリックでない:trainingの強度を設定するのに経験(試行錯誤)が必要である

Support Vector Machine(9章)

2つのカテゴリを分割する境界線を見出す。線に近い点列のことをsupport vectorという。
分布が島になってしまったら、島の中心からの極座標系などに変換すると、直線で分割できることがある。このような変換を(p.305)多項式変換という。

  • kernel trick:多項式変換の一般化として、距離を与えるドット式(内積)の式を変える。

K近傍(K-nearest neighbors)

ターゲットに近いitemの集合の平均から、ターゲットの地点のポテンシャルを計算する。明快な方法。計算の精度やrobustnessを評価するには、実測値を周囲の集合から計算してみて、そのズレを評価するクロス評価が有効(計算は膨大)

  • PROS:incremental
  • CONS:分布のスケーリングが正当かどうかクロス評価するのは結構大変

クラスタリング(3章)

グループ分けする。デンドログラム(ツリー)を描くとかっこいい(コレ大事)

  • K-means(K平均法)クラスタリング:グループの重心をa prioriに与えて、それを重み付けされたデータの引力で吸引させる。重心の位置の初期値がうまくバラけていることがキモ→この手の一様擬似ランダム分布のアルゴリズムは「アルゴリズムデザイン」に載っていた
グループの距離の尺度
  • ユークリッド距離:普通の線形空間の距離
  • tanimotoスコア:2つのグループの和集合の中の交差集合(A∪B-A∩B)の比率(c.f. hamming距離)
データを与えられたときに最初にとるアプローチ

最初はK平均法で大雑把に分類してみて、それらのグループに対して重心の距離に応じて階層的に分けていく

多次元尺度法(3章)

出来るだけ低次元の評価軸を導く。寄与度、説明変数。
線形代数の鬼。

非負値行列因子分解:(NMF:Non-negative Matrix Factorization)(10章)

データ列を説明する特徴ベクトルを取り出す。推定の精度はloopに依る。
まさにデータマイニング。ヘッジファンドあたりで使われてた雰囲気ありあり。妙に結果の解釈が難しいところなども、どうにでも理屈をつけられそうで、いかにも。

  • CONS:利用できるデータや結果が正じゃないといけないので、ネガティブ(抑制)な因子を表現することができない。計算が大変。結果の理解が難しい。

コスト関数(5章)

最適化=山登りである。複数のpeakがある場合に偽のピークにつかまらないための手法が必要

その他、ランダムな追記

p.307エントロピー

どれくらいびっくりさせる情報があるか。決定木の分割の良さの尺度(情報ゲイン)として使われる。分割後のグループのエントロピーが0になったら分割停止。
sigma(P(i)*log(P(i))
ところで、iの代表する区間の取り方で、この値は本当に変化したりしないのだろうか?