• このエントリーをはてなブックマークに追加

O’Reilly Japan – Pythonではじめる機械学習 を読んだ。

副題: scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

スポンサードリンク

動機

ニューラルネットを学ぶ、その前に

今まで、機械学習を通り越してディープラーニングの勉強をしてきた。
つまり基礎をすっ飛ばして、応用にいってしまったのだ。
自分の手法はただひとつ、ニューラルネットワークのみ!!

これでは、機械学習を勉強しているといえるのだろうか?
自分のなかで、疑問が湧き上がった。

本に付いている帯が印象的だった。
ニューラルネットワークを学ぶ、その前に! とのことだ。

これだ!ニューラルネットを学んで、
その後に行ってしまった自分にとってはこの帯はまさに心のうちをいい得ているものだった。

機械学習コンペの壁

ニューラルネットを学んで機械学習コンペに挑もうとしても、
前処理でなにをすればいいのかわからず手が出ない。

前処理は、特徴量エンジニアリングというらしいことを最近知った。
なので、前処理を詳しく解説している書籍はないものかと探していた。

この本の副題は、特徴量エンジニアリングと機械学習の基礎。これだ。

本の特徴

scikit-learnについての実践書

本書は、scikit-learnを使って機械学習をするための実践書だ。

機械学習の難しい理論は、でてこない。
そういう難解なものは、scikit-learnがすべて隠蔽してくれる。

この本では、機械学習アルゴリズムの利点と欠点、
ライブラリのパラメータの調整方法という実践的な知識が載っている。

また、ライブラリの使い方以外のことも書いてある。ズバリ、特徴量エンジニアリング。
どうやって、カテゴリカルデータやフラグデータをどうやってscikit-learnで扱うか、

数学はでてこない

本書は、微分積分、線形代数、確率論を何年も
学ぶことなく機械学習を使いたいという人のための特攻薬だ。

数学は一切出てこない。各機械学習の手法を言葉でわかりやすく説明している。

今、平行して機械学習のための数学の基礎固めを進めているのだけれども、
自分がなにをしたいかを考えた時、理論をガチガチにかためてなにもコーディングできないよりも、
Kaggleでバリバリデータ分析をしたいという思いがあった。

そこで、まずはscikit-learnで機械学習の概要を掴み、
Kaggleに積極的に挑み、理論は後付で学んでいく計画を立てた。

理論よりはコードファーストを目指す人にはオススメの本だ。

scikit-learnをつかった機械学習コンペ対策に

本の前半で教師あり学習と教師なし学習のアルゴリズムが解説されている。

残りの半分はなにが書いてあるかというと、

  • 特徴量エンジニアリング
  • モデルの評価方法
  • 交差検証、他
  • グリッドサーチを使ったパラメータチューニング方法
  • パイプラインを使った効率的なコーディング
  • テキストデータの扱い方

など、機械学習コンペに必要な技が細かく書いてある。
概要を説明したあと、scikit-learnをつかえばこんなふうにかけますよと、
実例を通して学ぶことができる。

学習できるアルゴリズムは豊富

たくさんのアルゴリズムが紹介されている。

それぞれ、どんな利点と欠点があるか、どういう場面で使うべきかが書かれている。

たとえば、教師あり学習のアルゴリズムを本書より抜粋。

  • 最近傍法: 小さいデータに関しては良いベースラインとなる。 説明が容易。
  • 線形モデル: 最初に試してみるべきアルゴリズム。 非常に大きいデータセットに適する。 非常に高次元のデータに適する。
  • ナイーブベイズ: クラス分類にしか使えない。 線形モデルよりもさらに高速。 非常に大きいデータセット、 高次元データに適する。 線形モデルより精度が劣ることが多い。
  • 決定木: 非常に高速。 データのスケールを考慮する必要がない。 可視化が可能で説明しやすい。
  • ランダムフォレスト: ほとんどの場合単一の決定木よりも高速で、 頑健で、 強力。 データのスケールを考慮する必要がない。 高次元の疎なデータには適さない。
  • 勾配ブースティング決定木: 多くの場合ランダムフォレストよりも少し精度が高い。 ランダムフォレストよりも訓練に時間がかかるが、 予測はこちらのほうが速く、 メモリ使用量も小さい。 ランダムフォレストよりもパラメータに敏感。
  • サポートベクタマシン: 同じような意味を持つ特徴量からなる中規模なデータセットに対しては強力。 データのスケールを調整する必要がある。 パラメータに敏感。
  • ニューラルネットワーク: 非常に複雑なモデルを構築できる。 特に大きなデータセットに有効。 データのスケールを調整する必要がある。 パラメータに敏感。 大きいモデルは訓練に時間がかかる。

また、教師なしアルゴリズムでは、以下のようなアルゴリズムが紹介される。

  • データセットの変換 ・・・PCA, NMF, t-SME
  • クラスタリング ・・・ k-means, 凝集型、DBSCAN

終わりに

機械学習の理論は難しいので、とりあえずscikit-learnを使って実際に動かすことで、
感覚をつかむというのはいい方法だと思う。

xgboostとかをはじめに知ってしまうと、理論は知らなくても万能感が得られたりする。

ただ、深く応用するためには理論も抑えていくことが大事なので、
自分はこれからはじめてのパターン認識を次に読んでいこうと思った。