機械学習の勉強を始めるには

ID: 41
creation date: 2009/10/13 00:05
modification date: 2009/10/13 00:05
owner: shunya
tags: 機械学習

thriftとかhadoopなど,何やらいろいろと手を出してしまい,ここのところブログの更新が滞ってしまっていますが,今日は前から書きたかったトピックについて自分へのメモの意味も含めて記しておきたいと思います.

はじめに

最近,といっても結構前からなのですが,海外のブログなどで「機械学習の勉強を始めるガイドライン」についてのエントリーがいくつか見られ,かつ,議論も少し盛り上がっています.僕は機械学習が好きなだけで,専門というにはほど遠いのですが,僕も一利用者としてはこのトピックに関してはとても興味があります.

機械学習というと,色々な数学的な知識が必要であったり,統計学や人工知能の知識も必要になったりしまったりと,専門的に学ぶ機会が無かった人にとっては興味が湧いてもなかなか始めるには尻込みしてしまうことかと思います.今日紹介するエントリーは,そんな方々にヒントになるような内容になっていると思います.基本的なことを体系的に説明しているのでとても質が高いです.

紹介するエントリー : Guide to Getting Started in Machin Learning

要約になりますが,上記のエントリーでは機械学習の勉強を始める流れを以下のように説明しています.

The Elements of Statistical Learning Data Mining, Inference, and Prediction.を読む

  • なんとこの本はPDFが公開されていますので参照してください.
  • この本は有名な教科書なのですが,これのチャプター1のIntroductionを読んで概要をつかむと良いと言っています.
  • Introductionには統計学習がどのような分野で応用されているかなどがまとめられています.
    • 医療分野や,マーケティング,画像処理,e-mailのスパムフィルタリングなど

Rで試す

  • The Elements of Statistical Learning Data MiningのIntroductionを読んだら,Rをダウンロードしましょう.
  • GoogleやFacebookではRがどのように活用されているかを記したエントリーのリンクがありおもしろかったです.How Google and Facebook are using R

Googleの場合

The typical workflow that Bo thus described for using R was: (i) pulling data with some external tool, (ii) loading it into R, (iii) performing analysis and modeling within R, (iv) implementing a resulting model in Python or C++ for a production environment.

上記を意訳で要約すると,GoogleのBoさんはRを以下のように使っているようです.

  1. 何らかの抽出ツールでデータを取得する
  2. Rに読み込ませる
  3. Rを使って解析したりモデルを作ったりする
  4. 結果のモデルをPythonやC++で実装する

といった感じで,つまりプロトタイプの段階でRを使って実験するようですね.

データを使う

Rで何かしらので機械学習の手法を使うには,データが必要となります.学習やテスト(分類)に使うデータをよくデータセットというのですが,これを集めるのは容易ではありません.以前にここのサイトでも紹介したデータセット集(Classicicationにおけるデータセット)をこのエントリーでも紹介しています.

UCI Machine Learning Repository: Data Sets

ここのデータセットを使ってRで遊んでみると良いでしょう.エントリーでは,先ほど示したThe Elements of Statistical Learning Data Miningを読み進めてRで実装してみると良いと言っています.

個人的には直感的に学ぶにはWekaもいいと思っています.wekaについては後述します.

Bishop本を読む

他にも機械学習の教科書は山ほどあるのですが,以下の本がおすすめだと言っています.

Pattern Recognition and Machine Learning (Information Science and Statistics)

Christopher M. Bishop

image:1:51Hq%2Bwu-3YL._SL160_.jpg

この本はかなり評判がいいですよね.実は僕は図書館で必要な箇所を読んだことしかないのですが,よくまとまっていた記憶があります.これは和訳が販売されていて,これもかなり評判がいいですね.結構色々なところで読書会とかもされているようですね.僕も買わなくちゃ.Bishop先生が書いた本ということで,一部ではBishop本と呼ばれているようです.

パターン認識と機械学習 上 - ベイズ理論による統計的予測

C. M. ビショップ

image:2:41z0AD06ZaL._SL160_.jpg

授業の動画ライブラリを見る

昨今は本当に便利な時代になって,スタンフォード大学の機械学習の授業を見ることができます.

Course Machine Learning

以下が授業で使っているハンドアウトになります.

CS229 Machine Learning Course Materials

実は,これは僕もジムで筋トレしながらこつこつと見ていたのですが,とてもおもしろいです.でも,音声が英語ということもあって,英語力も要求されるため,機械学習に関して全く知識が無いと聞き取りが大変かもしれないので,英語が得意ではない方は一通り勉強し終わってから復習の意味で見ると良いかもしれません.

以上が上記のエントリーに記述されていた,機械学習の初学者のためのガイドラインとなります.

で,自分はどう思うか

で,自分もまだまだ初学者の一員ではあるのですが,自分なりに機械学習を勉強する事始めとして良いのではないかと思っていることをまとめておきます.もちろん,これは賛否両論あると思いますし,人によって効率の良い学習方法は違うと思いますので,これは一アイデアとして読んでいただけたらと思います.

まずは,興味を持った手法を徹底的に学び尽くす

私は機械学習の全体の知識をいきなりつけようとすると挫折してしまう可能性が高いと思っています.特に昨今のアルゴリズムはとても複雑なモデルを使うようになっており,理解に時間がかかるものが多くあります.そこで,私としては(当時の私は)自分がやりたいことが達成できそうなアルゴリズムを1つに絞って勉強するというスタンスをとりました.そして,そのアルゴリズムは初学者であれば単純なものが良いと思います.例えば,機械学習の分野(明確には機械学習の分野とは言えませんが)で単純なアルゴリズムで,威力があるものでは,Naive Bayesや,decision tree,KNNなどがあります.これらのアルゴリズムはデータマイニングや,パターン認識などですぐに使うことができます.人によっては式だけ眺めてうなっているよりも,作りながら悩んだ方が理解が早いことがあります.動かしながらだと直感的に理解できるんですね.もちろん,人それぞれ学習の仕方があると思うので万人には通用するとは思っていません.

そして,一つのアルゴリズムを徹底的に学ぶといっても,実は全然一つでは収まらなくなります.例えばNaive Bayesを使ってみよう!と思ってNaive Bayesの論文などを読むと,その論文の中には細かい引用がたくさんされています.そして,その引用先の論文で言っている手法を理解していないと,その論文で言っていることがわからなかったりします.結局一つの論文を読むのに,10以上の論文を読むことになったりします.だから,簡単なアルゴリズムでもちゃんと理解しようするにはとても苦労するんですね.だけど,学ぶことがたくさんあるからそういうことをしているうちにだんだん幅広い知識がついてくる,と経験上思いました.

オープンソースのライブラリから学ぶ

僕がこれらの勉強を始めた当時は,実はあまりオープンソースのライブラリの情報がそこまで出回っていませんでした.しかし,今は本当に多くの,かつ質のいいオープンソースの機械学習のライブラリがあります.教科書を見ていてよくわからない!という方は人の実装を見ながら仕組みを理解するといいと思います.数式がものすごく難しく説明されていても,ソースを見ると意外に実装は簡単だったりするものもあります,自分の力だけで実装するのもいいし,人の実装を参照しながら自分の実装をするのも良いと思います.

一例ではありますが,最近では以下のようなものがあります.(全部細かくは調査していません)

  • nltk
    • http://code.google.com/p/nltk/
    • Python
    • 自然言語処理のライブラリなのですが,機械学習のアルゴリズムも多く実装されています.
    • Pythonということもあって,処理は遅いですがコードは読みやすいのでプロトタイプとしてはおすすめです.
    • クラスタリング・分類関係だと以下のような手法が実装されています
      • decision tree
      • maximam entropy
      • naibe bayes
      • kmeans
  • weka
    • http://www.cs.waikato.ac.nz/ml/weka/
    • JAVA
    • このサイトでもちょっと紹介したwekaですが,これはJAVAで実装されたData miningツールで多くの機械学習の手法が実装されています.
    • 有名な手法はだいたい実装されています.スピードもそこそこ出るのでちょっと遊んだり実装を見るにはおすすめ.
  • Mahout
    • http://lucene.apache.org/mahout/
    • JAVA
    • Hadoop上で動く機械学習ライブラリです.これは初学のためにはお勧めできませんが,Hadoop上で動くということもあり,実用上使えると思って現在調査中です.

まとめ

今回は素人の素人による素人のための機械学習事始めということでエントリーを書かせていただきました.実は僕は勉強の仕方は「何が一番いい」っていうのは無いと思っています.でも,勉強するために手助けになるための情報は存在すると思っています.それを一度まとめておきたいなと思って,書かせていただきました.もし,こんな情報があるよ!とか,こうやると効率がいいよ!というアイデアがある方がいらっしゃいましたらご教授いただけたらと思います.

----

10/14 追記

shima_shimaさんより参考になるご意見をいただいたので追記しておきます。以下shima_shimaさんのコメントを整理して引用させていただきます。

  • Bishop本のレベル表

http://ibisforest.org/index.php?PRML/course

  • その他参考になる本
  • 強化学習なども解説されているが古い部分もある

Machine Learning (Mcgraw-Hill Series in Computer Science)

Thomas Mitchell

image:3:41BUBXROOQL._SL160_.jpg
  • カーネル

カーネル多変量解析―非線形データ解析の新しい展開 (シリーズ確率と情報の科学)

赤穂 昭太郎

image:4:51CKmDcTiyL._SL160_.jpg
  • マルコフ連鎖

計算統計 2 マルコフ連鎖モンテカルロ法とその周辺 (統計科学のフロンティア)

伊庭 幸人 | 種村 正美

image:5:410B4V8HAXL._SL160_.jpg
  • 入門で優しい内容

フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで

荒木 雅弘

image:6:519Jh4Vxl9L._SL160_.jpg
  • Bishopレベル表の入門レベルの内容

パターン認識と学習の統計学―新しい概念と手法 統計科学のフロンティア 6

甘利 俊一 | 麻生 英樹 | 津田 宏治 | 村田 昇

image:7:4135AXJAS9L._SL160_.jpg
  • Bishopレベル表の入門レベルの内容

データマイニングの基礎 (IT Text)

元田 浩 | 山口 高平 | 津本 周作 | 沼尾 正行

image:8:41emmha0tpL._SL160_.jpg
Share Facebookでshareする
6 comments
shima_shima : PRML本翻訳の仕掛け人です.とりあげていただいてどうもです. EoSL本は,Bishop本より高度だと私は思っています.加算型モデルを重視しています.ちょっと,内容的には我田引水があると思います. Bishop本は,ややカーネルが多く,全体をベイズの観点で見ているという特徴があります.Bishopさんの筆力により,読みやすい本だと思い翻訳を思い立ちました. いろいろなレベルの内容が混ざってますので,レベル表を作りました http://ibisforest.org/index.php?PRML/course あと,著名な本は Tom Mitchell の Machine Learning です.強化学習とかもちょっと載ってますが,やや古くなってきました. カーネル系にご関心があれば,赤穂「カーネル多変量解析」岩波 とか,MCMCとかなら伊庭 他「計算統計II -- マルコフ連鎖モンテカルロ法とその周辺」岩波 とかかと. より入門的な内容としては,ブログの内容を拝見していると,おそらく簡単すぎるかと思いますが,荒木「フリーソフトで作る音声認識」森北の第1部 が一番やさしいと思います. その次だと,麻生 他「パターン認識と学習の統計学」岩波とか,元田 他「データマイニングの基礎」オーム社あたりかと思います.この辺が,Bishop本のコース表の入門レベルとお考え下さい. 線形代数と確率は多少いりますが,l^2空間とか,複素数とか,可則集合とかまで踏み込む必要はないので,高校数学 + Bishop本の1章+付録で事足ります. 機械学習にご関心をもっていただいて嬉しいです.以上,よろしければ,ご参考になさって下さい. (2009/10/13 02:16)
shunya : shima_shimaさん: 貴重なコメントありがとうございます!感激です. レベル表を拝見させていただきました.素晴らしいです! こういう指標があると学習するときは助かりますね.また,すべてではないですが各項目に解説ページが貼られているがとても便利だと思います.ご存知かとは思いますが,英語のwikipediaの機械学習のページが結構網羅的に書かれていて,普段はそこを参照したりしているのですが,shima_shimaさんのページもレパートリーに追加したいと思います. http://en.wikipedia.org/wiki/Machine_learning_algorithms レベル表を拝見していて思ったのですが,初学の場合はリストの「基礎」項目だけ読んでみて雑感をつかむのも良いかもしれませんね.項目を見ていて改めて良い本だと思いました.買っちゃいます. ご紹介をいただいた本では,麻生 他「パターン認識と学習の統計学」岩波は当時SVMの勉強をしていたときに読みました.当時はあまりこの手の本が無かったので重宝していた気がします. - 赤穂「カーネル多変量解析」岩波 - 伊庭 他「計算統計II -- マルコフ連鎖モンテカルロ法とその周辺」岩波 - 荒木「フリーソフトで作る音声認識」森北の第1部 - 元田 他「データマイニングの基礎」オーム社 これらの本で,岩波のものは前から気になっていたのですが目を通せずにいました.Bisiop本の入門編といった感覚で読んでおきたいと思います.というのも,実は今回書いたエントリーの内容は入門としては難しいと感じておりました.しかし,入門の入門,つまりshima_shimaさんが紹介してくださったような本の情報が少ないように感じていて,そこらへんの情報を勉強がてら少しずつ整理していきたいと思います. (2009/10/13 11:08)
anonymous : PDFのリンクのURLにtypoがありました (2009/10/14 11:53)
m11m : 荒木先生の本ですが、タイトルは軽いですけど中身は教科書です。学部の講義で使われていました。 (2009/10/14 11:57)
shunya : anoymousさん: 修正しましたー。ご指摘ありがとうございます。 (2009/10/14 14:13)
shunya : m11mさん: 情報提供ありがとうございます!amazonで目次を読んでみたのですが、基礎事項が整理されているよう良さそうですね。参考に読んでみますー。 (2009/10/14 14:15)
riddle for guest comment authorization:
Where is the capital city of Japan? ...