Coursera Machine Learning 受講ノート 5

f:id:blackawa:20171218110601p:plain

Week 2 / Multivariate Linear Regression

多変量線形回帰について取り扱う。多分ここからOctaveをガツガツつかっていくんだろうなー。

ここまでで取り扱ってきた線形回帰は、ひとつの入力値にくわえてθ(0)とθ(1)を扱うことで予測を行ってきた。 しかし入力値をもっと増やしたら?

これからx(i)は、i行目の入力値のベクトルとする。

すると今まで使っていた

hθ(x) = θ(0) + θ(1)x

の式は

hθ(x) = θ(0) + θ(1)x(1) + θ(2)x(2) + θ(3)x(3) ...

転じて

hθ(x) = θ(0)x(0) + θ(1)x(1) + θ(2)x(2) + θ(3)x(3) ...
// ただし x(0) = 1

と表現でき、これはつまり

hθ(x) = θTx
// θTはθを転置した行列
// x = [x(0) x(1) x(2)...]というベクトル

と表現できる。

多変量の線形回帰を解くには、これまでに扱った1変数の線形回帰と同じような式が出てくる。 値を少しずつ変えて最適解に近づく式もそのひとつで、今まで1つのパラメーターについてやればよかったことを複数のパラメーターについてやれば良い。

実践的なテクニック

入力値の値の範囲を調節して収束を早める

すべての変数を同じような値の範囲になるように調整する。 つまり、等高線が真円に近づくような値にするとより早く収束する。

だいたい-1から1の間らへんになるようにすると良い。

  • -3 < x(i) < 2 -> OK
  • 0 < x(i) < 2 -> OK
  • -100 < x(i) < 100 -> NG
  • -0.0001 < x(i) < 0.0001 -> NG

具体的には、すべての訓練データの入力値に適切な値を加えて、平均値がだいたい0になるようにする。 ただしx(0)は必ず1なのでそれをやらない。

mean normalizationは

x(i) - μ(i) / s(i)
// μ(i) = 訓練データxの平均
// s(i) = 値の範囲。max(x) - min(x) もしくはxの標準偏差

で表現できる。

適切な学習レートを見つけ出す

話変わって、今度はどうやって学習レートを調整するか?の話。 学習レートは、学習を繰り返すごとにコスト関数の値が0に近づいていくような値を設定すべき。

何回くらいイテレーションを繰り返せばよいかは予測が難しいので、コスト関数が常に収束に向かうことで学習レートの正しさを推測する。

予測に使う変数を選出する

必要なら、与えられた値セットを加工して新しい特徴を作り出してそれを予測に使用しても良い。 あるいは、1つの変数しかないがそれを3次関数としたい(上昇し続けるグラフになる)場合、1つの変数を累乗した値を2つめ以降のパラメータに使っても構わない。 累乗でなく平方根をとったりしても良い。