RandomForestの解説
R newsにRandomForestの解説が載っていると教えてもらったので、早速読んだ。
Classification and Regression by randomForest
Some notes for practical useは一回読んでおくと吉。
ICAからモデルベースのクラスタリング
昨日気になったので、とりあえずどんな感じか確かめようと。
> library("fastICA")
> library("mclust")
> data("iris")
> b <- fastICA(iris[1:4],2)
> mc <- Mclust(b$S,G=3,modelNames="VVV")
> plot(mc,b$S)


混合分布はクラスタリングの本にも載っているが、PRMLの下巻のほうがK-meansからEM,混合モデルの導入の流れがスムーズで分かりやすかったかな。
RでPCAとICA
出典がちょっとどこだかわすれたが。
- PCA 分散の大きな成分を抽出
- ICA 非正規性を最大にする成分を抽出
独立って、直交しないといけないんじゃないかなんて思っていたがこの資料みて納得。
その上で主成分分析、独立成分分析を読んだらさくっと理解できた。
> data("iris")
> a <- prcomp(iris[1:4])
>biplot()

> library("fastICA")
> data("iris")
> b <- fastICA(iris[1:4],2)
> plot(b$S)

ある種のデータを二次元のプロットとして見たい場合、PCAだと変に鎖上になってしまうものもICAだともうちょっと広がって見えてくれるかな。単にマップして見たいってだけだったらこういうやり方でもいいか。
あとPCAとかICAで次元を圧縮してから混合ガウス分布みたいなのでクラスタリングするってのはダメなのだろうか?
RでNMF
RでRandomForest
朝からRをいじりたくなって、「あーそういえば2.8出たんだっけ」とか言いながら、ソース落としてきてmacbookでコンパイルをしてみたがこけた。まぁ、2.7.1でRpy動くのでとりあえずいまのところはそっとしておいてやろうということで負けを認めない方向で。
で、RandomForestは好きな時に使えるようになっておかないといけないなぁといつもお世話になっている連載を読み直した。というより、いままで上っ面を押さえただけでわかった気になっていただけだったので、ちゃんと読んだ。
- 与えられたデータセットからN組のブートストラップサンプルを作成する。
- 各々のブートストラップサンプルデータを用いて未剪定の最大の決定・回帰木を作成する。ただし、分岐のノードはランダムサンプリングされた変数の中の最善のものを用いる。
- 全ての結果を統合・組み合わせ(回帰の問題では平均、分類の問題では多数決)、新しい予測・分類器を構築する。
BaggingとRFの大きい違いは、Baggingは全ての変数用いるが、RFでは変数をランダムサンプリングしたサブセットを用いることができるので、高次元データの計算が容易であるである。ランダムサンプリングする変数の数Mはユーザが自由に設定することができる。Breimanは、Mは変数の数の正の平方根をと取ることを勧めている。
あとはこっちも参考になった。
Random Forests では、個々のコンポーネントモデルを生成するのに全く新しい方法を利用する点が異なります。逆説的ですが、「強い」独立モデル同士では、モデルが全体として高いパフォーマンスを引き出すよう有効に結合しません。むしろ「弱い」独立モデル同士の方が効果的な結果をもたらす傾向があるのです。この理由として挙げられるのは次の 2点です:
まずひとつは、複数のモデルを組合せたり平均化を行っても、個々のモデルがお互いに非常に類似している場合には際立った精度の改善が見られないという点があります。極端な場合、各モデルが全く同一のコピーだとすると、平均化することによってそこから得られる利益(ベネフィット)は全く何もありません。組合せ技術で何らかの利益をもたらすためには、組合せるモデル同士はお互いに異なっている必要がある訳です。
要するに予測精度はある程度弱くてもよいからできるだけ直交するようなモデルを組み合わせることが大切ということか。
Rで使う
CRANにrandomForestというパッケージがあるのでそれを利用する。unsupervisedで遊んでみた。
> library("randomForest")
randomForest 4.5-28
Type rfNews() to see new features/changes/bug fixes.
> data("iris")
> set.seed(17)
> iris.urf <- randomForest(iris[, -5])
> MDSplot(iris.urf, iris$Species)
### plot ###
> importance(iris.urf)
MeanDecreaseGini
Sepal.Length 17.33820
Sepal.Width 15.19356
Petal.Length 17.30337
Petal.Width 12.92124

こっちはsupervised
> data(iris)
> iris.rf <- randomForest(Species ~ ., iris, proximity=TRUE,
+ keep.forest=FALSE)
> MDSplot(iris.rf, iris$Species)

他にもimportanceとかgetTreeといった関数が重要そう。
macbookでRpyを利用できるようにしたのでメモ
python2.5,R-2.7.1,rpy1.0.3という組み合わせで。rpy2-alphaはコンパイルが通らなかった。
Rのインストール
Rはソースからコンパイル。enable-R-shlibオプションをつけるのを忘れずに、というより配布されていたバイナリはこれつきでコンパイルされてないようなのでそのままではrpyが入らないはず。
R CMD config --ldflags
とか打つとOKかどうかわかる。 ダメげな場合は潔くソースから。
./configure --enable-R-shlib
make
ここでまた、make installするとshlibがなんかみつからなくなるという現象に悩まされた。そのため、ユーザー領域でコンパイルしたバイナリを使う事にした。/Users/kzfm/R-2.7.1/bin/Rが実体で/opt/local/bin/Rにシンボリックリンクを張って使っている。
Rpyのインストール
export R_HOME=/Users/kzfm/R-2.7.1
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$R_HOME/lib
これが重要。あとmacのgccでもコンパイルできなくてmacportのgcc使ってコンパイルする必要があるかもしれない。
あとは普通に
sudo python setup.py install
でいけるはず。
Rによる医療統計学
一通り読んだ。分かりやすくてお薦めの一冊。
まぁ、なんというか僕はクラスタリングとかPLS,PCRなんかのほうに偏っていて検定とか苦手(というよりもあまり使わない)のでこういったタイプの本は勉強するによいし、手元においておくと何かと便利(なはず)
macbookにRをいれた
yumみたいなのりで
sudo port install R
ってやったら、GCCがインストールされ始めてなんか危険な香りがしたのでキャンセル。CRANを見に行ったらmac用のバイナリがあったのでそれをインストールした。
でもこれって、rpyでつかえるんだろうか?
Rによる医療統計学
プログラミングのための線形代数
先週末から読んでいて、5章以外は読んだ。5章はJacobi法とQR法の話。カバーデザインからこの本はCGのための何かか?などと思わされるが線形代数の入門書だ。
特にプログラミングのためのと銘打っているが、コードはほとんど出てこない。むしろ行列の意味を説明することに重点をおいているので、行列というものが空間とかでどういう挙動をしめすのかイメージできるようになって楽しい。直感がちょっと働くようになるっていうか。
- LU分解
- 固有値
- 対角化
- Jordan標準形
といったあたりは知っているという人でも、改めてそれらがどういうイメージを持つのかとかを解説されると、(岩波の)数式だけの本とか論文ばかり読んで唸っていても分からないあたりがあーなるほどと思える。もうちょっと早く知っておくべきだった。さらに、枠囲みのプチコラムというかプチQ&Aが面白かった。



Rで学ぶクラスタ解析
パターン認識と機械学習 下 - ベイズ理論による統計的予測
Rによる医療統計学
Rによる医療統計学
プログラミングのための線形代数