FreeStyleWiki

Coursera 機械学習 - Week3

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

[機械学習]

Week3

  分類と表現 (Classification and Representation)

多くの場合、分類問題で線形回帰を使うのはあんまりよくない(うまいことデータセットを2分できない)
じゃあ ロジスティック回帰 使うぜ

ロジスティック回帰の仮説関数

  • h_\theta(x) = g(\theta^T x)
  • z = \theta^T x とおいて
  • g(z) = \frac{1}{1 + e^{-z}

これは シグモイド関数 、もしくはロジスティクス関数と呼ばれる。

  • シグモイド関数
    • y の値は 1 or 0 に限りなく近づく
  • 余談だが、ここでシグモイド関数を使って入力値を0~1の範囲にまとめることをパーセプトロンと言う。
    • (日本語のWikipediaはあまり詳しくないので英語版読んで)
  • 境界値により、0か1であることを判定してもよいのだが、それではグラフがカクカクになってしまう。シグモイド関数のような滑らかな関数を使うことで、もうちょっと融通の利く、しかしながら0か1の信号化が可能になる。

決定境界 (Decision Boundary)

  • 関数gに \theta^T X を与える場合
    • h_\theta(x) = g(\theta^T X) \geq 0.5 \\ \text{when } \theta^T X \geq 0
  • シグモイド関数と式の形から以下のことが言える(だいたい言えるということが言えるw)
    • \theta^T X \geq 0 \Rightarrow y = 1
    • \theta^T X < 0 \Rightarrow y = 0

  ロジスティクス回帰 (Logistic Regression Model)

目的関数(Cost Function)

正しくデータセットを2分するための目的関数J(θ)を定める。

  • J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \text{Cost}(h_\theta(x^{(i)}), y^{(i)})
    • \text{Cost}(h_\theta(x), y) = -log(h_\theta(x)) \hspace{10} \text{if y = 1}
      • y = 1, のとき仮説関数J(θ)は、hθ(x)が0に近づくほど大きくなり、hθ(x)が1に近づくほど小さくなる
    • \text{Cost}(h_\theta(x), y) = -log(1 - h_\theta(x)) \hspace{10} \text{if y = 0}
      • y = 0, のとき仮説関数J(θ)は、hθ(x)が0に近づくほど小さくなり、hθ(x)が1に近づくほど大きくなる

このJ(θ)はロジスティクス回帰に対して 凸関数 である。だから絶対大小が定まる。

単純化された目的関数と最急降下法 (Simplified Cost Function and Gradient Descent)

上述の目的関数は場合分けせずとも、1つの関数で表せるようだ。これからはそれを使っていく。

  • Cost(h_\theta(x), y) = -y \cdot log(h_\theta(x)) - (1-y) \cdot log(1-h_\theta(x)
    • 前半の-y, 後半の (1-y) がポイントで、こいつらがyの場合分けを数式的に表している。わりとわかりやすい。
  • 完全な目的関数(データセットが増えても対応できるやつ)
    • J(\theta) = - \frac{1}{m} \sum_{i=1}^m [y^{(i)} \cdot log(h_\theta(x^{(i)}) + (1-y^{(i)}) \cdot log(1-h_\theta(x^{(i)})) ]
  • 以下はそれをベクトル化したやつ ... h = g(X\theta) とおいて
    • J(\theta) = \frac{1}{m} \cdot \left( -y^T log(h) - (1-y)^T log(1-h) \right)

最急降下法

お待ちかねの最急降下法の実装

  • まず、普通に
    • \text{Repeat} \bigl{ \\ \hspace{10} \theta_j := \theta_j - \alpha \frac{\delta}{\delta\theta_j} J(\theta) \\ \bigr}
  • ベクトル化されたもの
    • \theta_j := \theta - \frac{\alpha}{m} X^T (g(X\theta) - \vec{y})

  クイズのヒント

  • 決定境界の理解が必要
  • 最急降下法の傾きの求め方について、式が変形されてもわかってないといけない
    • ロジスティック回帰の目的関数は → J(\theta) = - \frac{1}{m} \sum_{i=1}^m [y^{(i)} \cdot log(h_\theta(x^{(i)}) + (1-y^{(i)}) \cdot log(1-h_\theta(x^{(i)})) ]
    • ここは数学の知識が無いからわからんのだが、微分すると以下になるのだと思う
    • 普通に最急降下法を求めようとすると → \theta_j := \theta_j - \alpha\frac{\partial}{\partial \theta_j}J(\theta) = \theta_j - \alpha \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)}) x_j ^{(i)}
    • あと、シグモイド関数を代入した形も正解になるような

  複数要素の分類問題 (Multiclass Classification)

  オーバーフィッティング問題の解決 (Solving the Problem of Overfitting)

オーバーフィッティング問題(線形回帰、ロジスティック回帰)

オーバーフィッティング問題はフィーチャーが多くある場合、それに対して仮説関数h(θ)を過剰に合わせすぎることによって起こる
オーバーフィッティングした関数は、その時のデータセットにはよく一致するが未来のデータセットを予測できない

オーバーフィッティング問題の取り扱い

  • どうにかして仮説関数をプロットして視覚化したいけど、フィーチャーが多いと難しい
  • 選択肢1
    • どのフィーチャーを使うか任意で選択する
    • 選択のためにアルゴリズムを使う
  • 選択肢2
    • Regularization(正規化)を使う

  目的関数 (Cost Function)

  • Regularizationとはなんぞや?
    • 目的関数J(θ)にある種のペナルティを課すことで、それを平坦化する
  • J(\theta) = \frac{1}{2m} \big[ \sum_{n=1}^m ( h_\theta(x^{(i)}) - y^{(i)} )^2 + \lambda \sum_{j=1}^n \theta^2_j \big]
    • ラムダ以降の式が大きくなるほど目的関数が平坦化してオーバーフィッティングしにくくなるぞい

このラムダ式のことを「正規化パラメーター」というらしい

  クイズのヒント

Week3 Quiz2はわりと簡単だったので1回で解けた。よってヒントは無しです。

  Octave演習

足りない数学知識

  • ネイピア数
    • 自然対数の底らしい
    • 「自然対数 loge が「自然」であるというのは、数学において自然に生じ、よく見かけるということを根拠とするものである。」
  • Octaveでネイピア数を出すには
>> exp(1)
ans =  2.7183
  • シグモイド関数を実装すると、引数が大きくなるほど結果は1に漸近し引数が小さくなるほど0に漸近する
>> sigmoid(300)
ans =  1
>> sigmoid(1)
ans =  0.73106
>> sigmoid(0.5)
ans =  0.62246
>> sigmoid(-2)
ans =  0.11920
>> sigmoid(-200)
ans =    1.3839e-87
>> sigmoid(-133)
ans =    1.7331e-58