前回 から1年以上経ってしまったその理由とは・・・
概要
Week 3 では分類問題について学びました。
- 分類問題には Sigmoid 関数を使うとよろしい
- 複数クラスの分類方法
- 課題提出
講義メモ
Logistic Regression
- 分類を数値として考えたとき、それをプロットした図に直線をフィッティングさせるのは上手くいかないので、Sigmoid 関数を使う
- Sigmoid 関数を使った分類問題を解くことを Logistic Regression と呼ぶ
- Regression は回帰だが、結果は分類なので離散的なものになる
- Logistic Function は Sigmoid Function と同じものを指す
分類の仮説
- 0か1に分類する問題なので、0から1の間の値を回帰する問題とも言える
- 0から1の間の値をとる関数を仮説として回帰する
- multivariate linear regression のときの hypothesis を sigmoid function で包んだものを使う
凸
- convex 凸 でこぼこしてない 極小がない
- non-convex 非凸 でこぼこしている 極小がある
- sigmoid をいままでの cost function に入れると non-convex になるので最急降下法が使えない
- convex になる cost function を使う
advanced optimization
- ここまででminimize J(θ) を最急降下法で求められるようになったが、より早いアルゴリズムがある
- Conjugate Gradient
- BFGS
- L-BFGS
- 難しいので内容については解説しないが、αを決める必要がなく、処理が高速
- これらは数値計算ライブラリにあるものを使うべき
- Octave なら fminunc
Multiclass Classification
- 複数に分類する
- One-vs-all (one-vs-rest) によって 2 class 分類を使って複数 class 分類をできるようにする
- 3つに分けるときは、3つの 2 class 分類としていままでと同様に logistic regression を使う
- 分類を行うときは、各々の logistic regression の値 (確率を表すh(θ)) から最も大きいものを選ぶ
Overfitting
- underfit や high bias はあまりフィットしてない状態
- overfit や high variance はトレーニングセットにはフィットしているが新規のデータに一般化できていない状態
Overfitting を解決する方法
データセットをプロットして適切な仮説の次数を決めることもできるが、特徴が多いと難しくなる。対処法としては次の2つがある
- 特徴を減らす: モデルを選択するアルゴリズムを使う。しかし、全ての特徴が必要なこともある
- Regularization: 以下で説明
Regularization の考え方
- θ にペナルティを与え、複雑な形にならないようにする
- 誤差関数に 1000θ3^2や1000θ4^2を足す
- そうすると誤差を減らすにはθ3、θ4をとても小さくする必要があるので、形は二次関数に近づく
- 実際には、どの項にペナルティを与えるべきか分からないので、すべてにペナルティを与える
- つまり、J(θ)=いままでのJ(θ) + λΣθ^2
- θ0には適用しない (なんでだっけ?)
Normal Equation で Regularization
- λL を足すだけ
- L は単位行列の左上が 0 になったもの (θ0にペナルティを与えないことに対応してるはず)
Logistic regression で Regularization
J(θ)=いままでのJ(θ) + λ/2m Σθ^2
Octave と課題メモ
- 行列の要素ごとの計算は
.
を付ける - 行列 A を要素ごとに逆数をとるには A.^-1
- Octave の配列は 1 始まり
- 転置行列はダッシュを付ける A'
- Octave で式の結果を print させないためには文末に ; を付ける
- ... で行を次の行に継続する
for 文の書き方
m = length(y);
for i = 1:m
y(i)
end
英語
- w.r.t to 〜: 〜については
- tumor: 腫瘍
- malignant: 悪性の
- benign: 良性の
- penalize: ピーナライズ. ペナルティを与えること
1年経った理由
Macbook の買い替えなどで Octave の環境が無くなってから、環境構築が面倒になってプログラミング課題以外の部分を進めてたんですが、進んでいるようで進んでいないような感じになってやる気が落ちてきていつのまにかやっていませんでした。しかし、機械学習の良い教材が無いかということを友人に訊かれてこの講義をオススメしていた結果、友人のほうがずいぶん先に進んでしまい、出遅れ感を感じたり、内容知らないのにオススメしてるのもアレだなとか思ってやる気が復活した次第です。