機械学習, Rails, Androidが好きです - プログラマdogwood008のライフハック

最近のマイブームは機械学習, Ruby on Rails, Android、中でも機械学習を使った金融商品の自動取引に興味があります。

【Udacity講義】Intro Model Evaluation and Validation - Machine Learning Engineer Nanodegree

第一回目は “Intro Model Evaluation and Validation” 「モデル評価と検証」

リポジトリはここです: github.com 動画の内容を後から思い出しやすいように授業ノートを置いておきます。

機械学習とは?

たくさんのデータから、経験として何かを学ぶこと。

決定木 Decision Trees

f:id:dogwood008:20170412160914j:plain

スパムメール検知の仕組み

  • 最初は手で「スパムメール」「非スパムメール」をラベリングする
  • “Cheap"を含むメールがそれぞれのカテゴリで何通存在するか
    • スパムメールには20通
    • 非スパムメールには5通
    • したがって、 20 / (20 + 5) = 0.8 = 80 % の確率で、 “Cheap” の単語を含むメールはスパム
  • Naive Bays Answer

f:id:dogwood008:20170412160922j:plain

Gredient Descent 勾配降下法、最急降下法

  1. 「今山頂にいて、ふもとへ行きたい」とする
  2. 進むことができる道はたくさんある
  3. 1ステップ降りる
  4. 2-3を繰り返して、徐々にふもとへおりていく

f:id:dogwood008:20170412160928j:plain

Linear Regression 線形回帰

グラフ上にサンプルをとって、(完全には上を通らないけど)近くを通っていくような直線を引くと、未知の入力(家のサイズ)に対して、出力(家の値段)を推定できる。

勾配降下法による直線の引き方

  1. プロットした各点と、引いた直線との距離をはかる
  2. この距離は「誤差」と呼ばれる
  3. 各点において、はかった距離(誤差)を全て足し合わせる…※
  4. あらゆる直線の引き方について、誤差の総和(※)を算出し、※が最も小さくなる直線の引き方が最も誤差の少ない直線の引き方である

注意

このとき、算出した誤差の総和(※)の数値そのものには興味が無く、いろんな直線の引き方で比較して、誤差が大きい小さいがわかれば良い。

例えば、プロットした点のy座標が引いた直線より上にある場合、距離を出すには (プロットした点のy座標)-(プロットした点から直線への垂線と直線との交点におけるy座標) というように、正負を気にして引き算の順序を変えるか、絶対値をとるかする必要がある。

これは若干面倒くさいので、 誤差を二乗し、√の中に突っ込む という方法がある。これを「最小二乗法」という。前述の通り、値の大小を比較できれば良いので、このような方法が用いられる。

f:id:dogwood008:20170412160936j:plain

ある手法に基づいて分類したモデルを使用すると、未知の入力に対して分類ができる。

Logistic Regression ロジスティック回帰

分類のやり方

  1. 前提として、全てのプロットした点には2種類の内、どちらかのラベリングがしてある(図の場合、合格か不合格)
  2. 2つのグループを分けるために、「えいやっ」ととりあえず直線を引く
  3. 間違って分類された数(誤差)を数える
  4. いろんな直線の引き方を試して、誤差が最も少なくなる直線の引き方が最も良い引き方

分類したモデルで、未知の入力を評価する

図の例だと、テストの得点が7、グレードが6の学生は合格か、不合格かを判断している。

f:id:dogwood008:20170412160942j:plain

Support Vector Machines (SVM) サポートベクタマシーン

ある手法に基づいて分類したモデルを使用すると、未知の入力に対して分類ができる。

  1. 適当に直線を引く
  2. 最も 近い 点までの距離を覚えておく
  3. いろんな直線の引き方を試す
  4. 覚えておいた距離同士を比較し、最も 長い ものが採用される

f:id:dogwood008:20170412160947j:plain

Neural Networks ニューラルネットワーク

その点がどんな属性を持っているかで分類する。

  1. 適当に直線を複数引く
  2. それぞれの点で、その直線に対しどのような位置づけかを覚えておく
  3. 図中は直線よりx軸またはy軸より上下または左右のどちらにあるかでYes/Noに分類

f:id:dogwood008:20170412160953j:plain

Kernel Method カーネル法

直線で分類することができない・直線での分類では不十分の時に使える。次元を1つ追加して、その次元で分類を行う。

図中の例では2次元から3次元へ拡張し、 z = xy を z軸 へ導入している。

f:id:dogwood008:20170412160958j:plain

K-means Clustering K平均法、Kミーンズクラスタリング

  1. 顧客は最寄りのピザパーラーへ行く
  2. ピザパーラーが新規出店する
  3. 顧客が行くピザパーラーが変化する

f:id:dogwood008:20170412161004j:plain