DeepLearningに先立つ機械学習講習会 に行ってきた

いろんなものを放置調整して、機械学習の勉強会に行ってきた。 machinelearningstudy.doorkeeper.jp

こちらのエントリの方がきれいにまとまっています。 www.itbook.info

以下、感想 f:id:tnaototo:20150524114826j:plain

ただでさえも遅刻なのに飛行機が遅延するというorz
着いた時には環境構築やってて、遅れを取り戻せるか不安だったが、
vagrantのboxが提供されていたので助かった・・
vagrantやdockerイメージがあるとハマらなくて済むなと(^^)
 

環境構築後は実習
Pythonの使い方で1時間、機械学習で1時間
全てiPythonのnotebook(?)でやったけど、コードが補完されるので書きやすかった。
 

機械学習は日本語でコードの説明が聴けたのが一番の収穫だったなと。
scikit-learnのチュートリアル含め、英語の情報がほとんどなので・・
ま、英語を勉強し(ry  

実習時の資料やコードを持って帰れたので、
帰ったら今一度パラメータいじって試してみよう。
 

今回は「教師なし学習」のみだったので、次回以降も参加したい。
 

以下、メモ


20150523 DeepLearningに先立つ機械学習講習会

機械学習とは

機械に「問題を解くためのの規則性」を見つけさせる

用語

  • 「正解」となる値 = Target(目的変数)
  • 「予測のもと」となる値 = Feature(特徴量)

教師あり学習

  • 分類
  • 回帰

教師なし学習

  • 正解のないデータから規則性を見つける

一番いい手法なんて無い

  • No Free Lunch Theorem
  • 人の手による試行錯誤
    • Under-FittingとOver-Fitting(過学習)
      • 「ちょうどいい」複雑さを探す
  • LinkPlaza Demo

  • Featureの重要性

    • 肌感覚
      • 手法の改良
        • 改善しても数%..
      • 良いFeature
        • 最低15%の改善は見込める
        • 学習しないとわからない

Deep Learningの強み

  • 自動的に「有用な」Featureの抽出
    • 化学知らなくても化合物の活性予測で優勝(Featureの選択してない)
  • Featureの自動抽出が「革命的」

Deep Learningの黒魔術

  • 学習時のパラメータが多すぎる
    • 通常10個 <-> Deep Learningは100以上
  • パラメータ調整に独特なコツ

Python

読み方

  • pandas - パンダス
  • numpy - ナムパイ
  • scikit - サイキット

書き方

  • [3:5] -> 3番目と4番目のデータのみを取り出す
    • 5番目は入らないので注意
years_list = [2010, 2011, 2012, 2013, 2014, 2015]
print years_list[3:5]
[2013, 2014]
  • [] -> リスト
  • () -> タプル

  • lambda -> 無名関数

  • Pandas.Series -> 時系列データを扱う

機械学習

Irisデータ - どんな変なモデルでも精度が出る

まずはいろいろグラフを出してみて、使えそうなパターンを見つける

学習の典型的パターン

  1. target=y, feature=xとする
  2. モデルの形を決める
  3. モデルの形で一番いいパラメータを求める

「あてはまり」の最大化 =「あてはまらなさ」の最小化

典型的でないパターン

  • K-近傍法
    • 予測したいFeatureの近くにあるFeatureをk個取ってくる
    • それの平均から判断する
      • 「近いデータと同じになるだろう」

教師あり学習のタイプ

  • 典型的パターン:パラメトリック
    • 学習・予測早い
    • データに強い仮定を置く
  • 典型的でないパターン:ノンパラメトリック
    • 学習・予測遅い
    • データに弱い仮定を置く

どのパターンがいい?

  • 性能評価
    • 誤差で見るとOverFitting(過学習)に陥る・・
    • Cross Validating(交差)
      • 学習データの一部を検証にのみ使う
      • 例) 10回やって、各誤差の平均値をそのモデルの性能とする
from sklearn.linear_model import LogisticRegression
from sklearn import cross_validation
cv = 10 # 何分割するか
logit= LogisticRegression()
scores = cross_validation.cross_val_score(logit,X,Y,cv=cv)
print(sum(scores)/cv)

Over-FittingとUnder-Fitting

  • k=1 : モデルが難しすぎる = Over Fitting
  • k=80 : モデルが簡単過ぎる = Under Fitting

  • k=80でもcol_index=2と3にすると精度が上がる

    • 有用なFeatureがわかれば精度が格段に上がる

おすすめ書籍

よくやるパターン

  1. 大量のデータがある
  2. プロットしてみる
  3. プロットするFeatureを色々変えて、目視
  4. これかな〜というものを見つけたら、掘ってみる

実習でやったようなアプローチ