高卒フリーターがAIエンジニアを目指す

機械学習・Python・数学 の勉強メモ

Coursera Machine Learning 2週目の復習

自分用のメモです。

①Multivariate Linear Regression

複数の特徴量(Feature)

線形回帰で、複数の変数を持つものは、"multivariate linear regression"と呼ばれる。
これまではインプット(x)は一つだったが、普通はx1,x2...のように複数ある。
記法
n=特徴量の数 \\m=データの数 \\x^{(i)} = i番目のデータの複数の特徴量 \\x_j^{(i)} = 特徴量jの、i番目の値
nとmで違うのに注意。mはデータのセットの個数、nは特徴量の個数

Hypothesis 仮説関数 (特徴量が複数ある場合)

 h_θ(x) = \theta_0x_0 + \theta_1x_1+ \theta_2x_2 + ... \theta_nx_n
注意:x0なんていう特徴量は存在しないが、x0があるとしてx0=1とすると、スッキリしたベクトル式が書けるのでそう定義する。
x=
\begin{bmatrix}x_0\\x_1\\︙\\x_n \end{bmatrix}\in R^{n+1} \\
\theta=
\begin{bmatrix}\theta_0\\ \theta_1\\︙\\ \theta_n \end{bmatrix}\in R^{n+1} \\
h_\theta(x) = \theta^T_x

コスト関数 (特徴量が複数ある場合)

J(\theta_0,\theta_1,...,\theta_n) = \frac{1}{2m}\sum_{i=1}^{m}(h_θ(x^{(i)}-y^{(i)})^2

Feature Scaling -特徴量のスケーリング

特徴量のサイズの大きさは揃えて計算したほうがいい。
例えば、家の特徴量として、面積x1は0-2000feet, ベッドルームの数x2は1-5個
のように特徴量の大きさが離れていると、その2つの値に同じα(学習率)を用いると最急降下法のコストが高くなる。
x_1 = \frac{2000}{size(feet^2)} \\
x_2 = \frac{5}{number of bedrooms}
のように。

スケーリングの目安としては、全ての特徴量が -1 ≦ x ≦ 1 に収まるようにするとよい。
-1 ≦ x ≦ 0 はOK, -100 ≦ x ≦ 100 や -0.01 ≦ x ≦ 1 はダメ

スケーリングの仕方は
・特徴量を最大値で割る
・特徴量 = (特徴量 - 平均値)/取る値の範囲 で置き換える
 x_1  = \frac{size - 1000}{2000}

学習率αの選び方

αが小さすぎると、収束が遅い
αが大きすぎると、コスト関数の値は小さくならないかもしれない
ので、αは都度試してみる

多項式回帰

直線の式に当てはまらなさそうなデータでも、線形回帰モデルを工夫すれば使うことができる。
仮説を
h_\theta(x) = \theta_0  + \theta_1(size) + \theta_2(size)^2
としたとき、
x_1 = size \\
x_2 = size^2
のように、sizeとsizeの二乗をそれぞれ別の特徴量とする。
このとき、特徴量のスケーリングがより重要になる。
なぜなら、例えばsize =100ならsize^2は10000になる、つまり各特徴量の差が大きくなるから。

②Computing Parameters Analytically

Normal Equation 正規方程式

正規方程式の導出と計算例 | 高校数学の美しい物語
↑より

A⊤A が正則なとき、Ax−b を最小にする x はただ一つであり,
それは正規方程式
A^⊤Ax=A^⊤b
を解くことで得られる。(x,bは縦ベクトル、Aは行列)

これを変形すると
\theta=(X^TX)^{-1}X^Ty

最急降下法と正規方程式の特徴まとめ

最急降下法 正規方程式
学習率αを設定する必要がある αの設定がいらない
たくさんのイテレーションが必要 一発で求められる
O(kn^2) O(n^3) ...X^TXの計算が必要
nが巨大なときに使うといい nが巨大だと遅い

だいたいn=10000くらいが境目になるらしい。それより小さければ全部正規方程式でいい。

O(nkn^2)とかいうのは、計算量(オーダー)のこと。
ざっくりいうと、計算するのに必要な所要時間のようなもの。
qiita.com

Normal Equation Noninvertibility 逆行列が存在しないときの正規方程式

逆行列が存在しないときはほとんどないらしい。
もしそうなったときはいくつか原因が考えられる。

  • 冗長な特徴量がある
    • x1=size in feet^2
    • x2=size in m^2 のように

 これらは線形独立らしい。

  • 特徴量が多すぎる(e.g. m≦n)

たぶん多重共線性っていうのに関係してる?

Octave/Matlab Tutorial

プログラミング関連の話は省略する。

Vectorization ベクトル化
  • ベクトル化の例1

h_\theta(x) = \sum_{j=0}^n\theta_jx_j 
\\=\theta^Tx
\\x,\thetaは列ベクトル

\theta_j := \theta_j-α\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} (for\ all\ j) \\
\theta_0 := \theta_0-α\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \\
\theta_1 := \theta_1-α\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \\
\theta_2 := \theta_2-α\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}


これを
\theta:=\theta - αδ \\
 where\space δ = \frac{1}{m}\sum_{i=1}^m(h \theta(x^{(i)}) - y^{(i)}) x^{(i)}
とする。

\theta:n+1の列ベクトル\\
α:スカラー\\
δ:n+1の列ベクトル\\
h\theta(x^{(i)}) :スカラー. \theta^Txだから\\
 y^{(i)}:スカラー