Posted at 2015-03-08 22:56:07 under テクノロジ (by key)

機械学習については画像内の物体が認識できるとかそういう機能レベルの知識しかなくて、 ウェブサイトのコードをコピペするレベルでしか触ったことがなかった。 ちょうどシバタさんの ディープラーニングで作る「面白さ」のヒートマップ を読んで面白いなーと思っていたら、 PyData Tokyoのチュートリアルがあったので申し込んでみた。抽選だったけど当たって良かった(笑)。

で、土曜日に行ってきたというわけ。

チュートリアルは2部に分かれていて、前半は概論とデータの作り方、後半はモデルの作り方と評価でした。

メモと思ったことをパラパラと。

イントロ

  • Pythonとデータ分析
    • Pythonのデータ分析はいま話題
    • R遅い(所々で繰り出されるR dis!)
    • 機械学習系のライブラリが豊富
  • チュートリアルのゴール
    • データ解析の基本
    • ツールの使い方習得
  • 例題
    • Kaggleのタイタニック生存者推定モデル のデータを使う(2部で語られるが、チュートリアル参加者をKagglerにすることが裏のミッションだった!)
    • その名の通り、タイタニックの乗客データから生存者を推定するモデルを作る
    • 簡単なモデルで80%前後。90%を目指すと相当つらいかんじ。

タイタニックの話はご存知でしょうか?映画のタイタニックを知ってる人は多いですね? お金持ちの女性が助かって、若くてお金のない男性は死んでしまうという話ですね。 乗客データには年齢、船室、性別、生死などがあって、それらの値を入力すると生死がわかる、というロジックを題材にします。

チュートリアル第1部

ツールの使い方、データの作成方法、仮説について。

  • ツール
    • ipython notebook
    • scikit learn
  • 可視化ツール
    • matplotlib
    • tableau (きれいにプロットできるけど高い!今回はもちろん使わず)
  • データの作り方
    • 前処理超大事(前処理専門の人を 前処理スト と呼んで敬う)
    • 汚いデータからは正しいモデルは出来ない
    • 外れ値の除去
    • 文字データの数値化(male→1など)
    • 範囲データのグルーピング(年齢→年代など)
    • 欠損値のハンドリング(レコード除去、ダミーデータで置き換え)
    • ダミー変数
    • 要らないデータは捨てる
  • モデルの作り方
    • (話が前後しますが…)仮説を元にデータを作る
    • 「男性は死にやすく、女性は生き延びやすい」、「1等船室は生き延びやすく、3等船室は死にやすい」 → 性別、船室データは重要、その他は捨てるなど

仮説やデータの作り方が重要というのは何となく感じていましたが、何のためにデータを加工するか、どう加工するかは、 具体的な内容を見て目から鱗が落ちる内容でした(レベル低くてスミマセン)。

データセットの重要性はチートシートを見ると良いと思います。

https://d262ilb51hltx0.cloudfront.net/max/1920/1*LixatBxkewppAhv1Mm5H2w.jpeg

An Extended Version Of The Scikit-Learn Cheat Sheet

チュートリアル第2部

2部では実際にデータを加工してモデル化して可視化して評価、というのをやります。

話が早いのと飛び飛びかつ前後するのがつらかった…。あまりメモ取れず。

  • 分類器
    • いくつかの要素を集めて分類する処理(2つの要素なら2次元にプロットして2分割する処理)
    • 2次を超えると人間が理解するのは難しい
    • 要素の距離が最も離れるようにする
    • 陰陽を分割できるようにする
  • よく使われるアルゴリズム
    • 回帰型(Linear Regressionとか)
    • ツリー(決定木とかRandomForestとか)
    • ニューラルネットワーク(ディープラーニング)
  • 可視化
    • scikit-learnとmatplotlibで可視化
  • モデルの評価
    • 性能が良いモデルの定義をする
    • precision, recall, F値
  • 性別を元に分類器の作成
    • 仮説:女性は全員生存、男性は全員死亡
    • accuracy_score()で正解率を出す
  • データセットの使い方
    • K分割交差法 データセットを1/nに分割して、学習とテストに使う(クロスバリデーション)
    • scikit learnのtrain_test_split()が使える
  • パラメタの最適化
    • アルゴリズムのパラメタを総当りで検索し、スコアの良い物を探す
    • GridSearchCVを使う

scikit-learnにデータセットの分割実行する関数があるのは知らなかったし、パラメタを変更しつつアルゴリズムを実行できるGridSearchCVがあるのも知らなかった。 モデルの評価方法、ツールの実践的な使い方は大変参考になりました。


丸一日かけてチュートリアルを実施して、LTを見て個々人のアプローチを確認(チュートリアルを実践したら、アプローチの方向性が理解できるように鳴った!)して、ピザとビールで乾杯。 新しい知識を習得して知り合いも作れて良いイベントでした。 余談ですが参加費3,000円で美味しいお弁当付き、お菓子付き、懇親会のビールとピザ付きなら安いと思います。また行きたいな!

Tags: python
blog comments powered by Disqus