第2回入門機械学習読書会は5/25@富士です

第2回は富士の吉原でやります。

今回は大きい部屋が埋まっていたため定員が少なめなのでご注意ください。

グルメ的にも移動的にもちょうどホットな話題が多いので、観光がてら参加するのもいいでしょう。

1237541908

おやつは杉山フルーツの生ゼリーを用意しようかと思っています。

package_installer.R

入門機械学習のサンプルコードについているインストーラは依存関係のあるパッケージも入れたりソースからインストールするようになっているのでエディタでinstall.packages関数をちょいといじるといいかもしれません。

for(p in cran.packages) {
    if(!suppressWarnings(require(p, character.only = TRUE, quietly = TRUE))) {
        cat(paste(p, "missing, will attempt to install\n"))
        install.packages(p)
    }
    else {
        cat(paste(p, "installed OK\n"))
    }
}

第一回入門機械学習読書会終了

皆様お疲れ様でした。

今回初めてCCCを使いました。廃校になった小学校を転用した施設ですが、机と椅子はノスタルジーあふれるものではなかったですね。

1367095761

2章の途中までやりましたので、次回は残りと3章を演る予定にしています。5/18といいましたが、Nginxとバッティングするのはよくないので次の週(5/25)にやる予定で調整します。多分富士になるので早めの昼に来て、つけナポリタンとかがんもいっちなんかを攻めるといいです。

それから、今回は懇親会をいれなかったので、次回からはいつものように設定していこうと思っています。 ちなみにアナウンスとか調整はgoogle groupsのMLを使っているのでこっちにも参加して頂ければと思います。

RとOpenCV(画像認識)

みなさんここらへんに興味があるみたいなのでちょっと調べておきました。

本も出版されているようです。

ProductName デジタル画像処理 (Rで学ぶデータサイエンス 11)
勝木 健雄
共立出版 / 3885円 ( 2011-11-23 )


ggplot2のtilde(~)

ggplot2のfacet_wrapで~Speciesとやっててtildeなによ?みたいな話が出たんだけど、いまいちよくわかってなかったので、調べてみたが層別したグラフを並べるための記法のようですね。

lapply

自前実装したヒトがいるのでそっちを参照。

高階関数がわからないのであればunderscore.jsのmapの実装は

_.map = _.collect = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
each(obj, function(value, index, list) {
  results.push(iterator.call(context, value, index, list));
});
return results;
};

Haskellだったら再帰ですね。

map :: (a -> b) -> [a] -> [b]
map _ []     = []
map f (x:xs) = f x : map f xs

で、あらためて該当するコードを読めばよいでしょう

get.location <- function(l) {
  split.location <- tryCatch(strsplit(l,",")[[1]], error= function(e) return(c(NA, NA)))
  clean.location <- gsub("^ ", "", split.location)
  if(length(clean.location) > 2) {
    return(c(NA, NA))
  } else {
    return(clean.location)
  }
}
city.state <- lapply(ufo$Location, get.location)

Windows版のRStudioが不安定

Windows版のRStudioがよく落ちていたようですが、一応素のRでもこんなかんじでテキストエディタが使えるみたいなので、次回は試すといいかもしれません。

明日は入門機械学習読書会です

ちょっとggplot2の説明のための資料を足してた。

ggplot2を使えば、こんな感じのいい感じのプロットがさくっと書ける。種毎にプロットを分けてそれぞれ線形回帰直線を引いてます。

library(ggplot2)
g <- ggplot(data=iris, aes_string(x='Sepal.Length', y='Sepal.Width', color='Petal.Length'))
g + geom_point() + facet_wrap(~Species) + geom_smooth(method='lm')

plot

興味があれば一緒に勉強しませんか?

入門機械学習の1章のUFOデータをpandasで読み込めない

1章のデータをpandasのread_tableで読み込もうとすると

CParserError: Error tokenizing data. C error: Expected 6 fields in line 755, saw 7

となって、エラー終了する。 これはlong descriptionの中に区切り文字であるtabが含まれているせいで、カラムの長さがちゃうよっていうエラーなんだけど、こういうダメな行をスキップするオプションが見つからなかった。

ProductName Python for Data Analysis
Wes Mckinney
Oreilly & Associates Inc / 3634円 ( 2012-10-29 )


pythonでデータのクリーニングをやる場合にはpandas使うよりもforループ回して、要素を一つ一つチェックしていくほうがやりやすいかも。対話的じゃないので、途中のデータを取っておきにくいのでデータがでかい場合試行錯誤しにくいけど。

ProductName 入門 機械学習
Drew Conway
オライリージャパン / 3360円 ( 2012-12-22 )


Rstudio触っていた

土曜日の入門機械学習読書会のためにRstudioをいじっているけどこれはかなり便利。

1章のデータ(UFOの目撃頻度を可視化する) mlch1

2章のデータ(体重と身長) mlch1

RStudioのいいところ

  • 補完が効く
  • エディタがついてる
  • DataFrameの中身が簡単にチェックできる
  • Gitと連携できる(未確認)

Rstudioのいまいちなところ

  • Ctrl-[Int]がmission controlに奪われていて、バッファの切替ができない

来週から入門機械学習の読書会ですよ

来週から久々の読書会が始まるのでパラパラめくりながら一回にやれそうな章を区切ってみた。

ProductName 入門 機械学習
Drew Conway
オライリージャパン / 3360円 ( 2012-12-22 )


  1. 1章 Rを利用する, 2章 データの調査
  2. 3章 分類:スパムフィルタ
  3. 4章 順位付け:優先トレイ
  4. 5章 回帰:ページビューの予測
  5. 6章 正則化:テキスト回帰
  6. 7章 最適化:暗号解読
  7. 8章 PCA, 9章 MDS, 10章 k近傍法
  8. 11章 ソーシャルグラフの分析, 12章 モデル比較

大体8つに分けられそうなので、毎月やれば今年中に終わりそう。

以下、メモ的なもの

  • 初回はR言語の説明が必要
  • スパムフィルタは別途ベイズの定理を分かりやすく説明する必要がある
  • 6章の過学習も説明が必要、正則化
  • 7章もちょっと補足が要りそう
  • 8,9,10はあっさりしすぎ

Parallel R

Rで並行、並列プログラミングやHadoopを使うためのライブラリの紹介とか使い方の本

  • Snow: works well in a traditional cluster environment
  • Multicore: popular for multiprocessor and multicore computers
  • Parallel: part of the upcoming R 2.14.0 release
  • R+Hadoop: provides low-level access to a popular form of cluster computing
  • RHIPE: uses Hadoop’s power with R’s language and interactive shell
  • Segue: lets you use Elastic MapReduce as a backend for lapply-style operations

ProductName Parallel R
Q. Ethan McCallum
Oreilly & Associates Inc / 2254円 ( 2011-11-04 )


最近pandasのほうに移ってしまったので途中までしか読んでない。Rでなんとかしないといけない状況になるまで使わないだろうなぁ。

次の静岡Developers勉強会は入門機械学習の読書会です

前回のHTML5から本が決まらず1年以上のブランクがありましたが、入門機械学習を読んでいくことになりました。

1364714609

ひと通り読んだところ、こんな感じの本なので、機械学習に興味があるヒトには面白いかなと。

というわけで参加をお待ちしています。

入門機械学習

入門機械学習は機械学習を使いたいヒトのための入門書であり、作りたいヒトのための本ではありませんので統計の本にあるような数式は全然出てきません。(これはこれでベイズの定理とか正則化とか説明できているのか?と疑問に思うところはあるのだが。)

お手軽にどういう問題の時にどういう手法を選択すればいいか?がわかるような内容になっているので、これはこれでありなのではなかろうかと。

とりあえず使ってみて機械学習がどんな感じのものなのかという感触をつかめばよいと思う。

事例としては

  • 電子メールのスパム判定
  • アマゾンのオススメみたいなの
  • ウェブのアクセス数を予測する
  • twitterのソーシャルグラフを分析する

といった感じで万人にオススメできるような内容になっています。

ProductName 入門 機械学習
Drew Conway
オライリージャパン / 3360円 ( 2012-12-22 )


ちょっと残念なのは教師なし学習(クラスタリング)の手法(PCAとかMDS)の説明が超適当で、クラスタリングの素晴らしさについてほとんど触れられていないところと、SVMがおまけ程度でSVMのお手軽さがわからないのと、みんな大好きRandom forestに触れられていないあたりかなぁ。

それから本書のコードはRで書かれているのだけど、本書の内容の範囲だったらRなんて代入が<-になったjavascriptのようなものなので、ちょっとjavascriptを書いたことのあるプログラマーであれば、少ない労力で機会学習の基礎が学べて費用対効果的にかなりお得じゃないかと思う。

あとはggplot2のグラフ描画の快適さは癖になる。

本書を読んで

  • より使いヒトはCRANのライブラリ漁りをすればいいし
  • 作ってみたくなったヒトは王道のPRMLの方向に進んでいけばいい

かなと思う。

おまけ

ソーシャルグラフの分析にGephiをつかっていたのだけどCYtoscapeとの違いがちょっと気になったのであとで調べてみるかもしれない。

富士市の人口推移

ちょっと時系列解析を触ってみたかったのと神戸に移動するのに時間があったので、富士の人口推移をプロットしてみることにした。

どれどれと月別人口の推移にアクセスしたらあーエクセルかよ、、、。この表管理している人は、綺麗な表をつくるところが目的で、本来の目的である分析のためのデータだってことをすっかり忘れてるよなぁと思いつつ呪いの言葉を吐きながらコピペしてデータを作りなおした。(普段はpyEcelerator使ってるのでコピペなんてやんない。)

ところで、統計情報のページってデータのせるだけで、プロットしたり分析サマリーのせたりしないのね。不思議だ。

できたcsvはgoogle spreadsheetに保存しておいたので好きに使ってください。

プロット

2008年11月から旧富士川町の人口が増えているので合併時の人数を除いたデータでプロットしている。本来は2008年10月までの富士川町の人口推移を加えたほうがいいんだろうけど、データが見つからなかった。

fpop <- read.csv('fuji_pop.csv')
fpop.ts <- ts(fpop$norm_pop, start=1967, frequency=12)
plot(fpop.ts)

pop

単に絶対数の比較をするだけでは、日本の人口変動の影響を排除できないのでノーマライズしてやる。日本の人口データはe-statの1番を使ったが、H12までのデータしかないので、総務省の2-1で補ったが、2010までしかなかった。それから日本の人口は月毎ではなくて年毎のデータを使っているのでギザギザになってる。

fpopr.ts <- ts(fpop$np_jp, start=1967, frequency=12)
plot(fpopr.ts)

pop

まぁ、頭打ちから現象に転じてるのはほぼ確実でしょうかなぁ。僕はピュアな富士市民ではないのでイベントとグラフの変動を結びつけて解釈できないのが残念。

あとは人口構成比と結びつけてどのくらいの速さで人口が減少していくかとか、(老人世代が増えることで)活力が失われていくかとかそっちのほうが気になる。市でもそういう分析やってるんだろうか?やっているんだったら分析技法の参考にしたいのでみてみたいなぁ。

それから図書館ももっとRの蔵書増やしたほうがいいと思うよ