Yabu.log

色々勉強するブログです。

Coursera Machine Learning week2 その1

重回帰分析 (multivariate linear regression)

単回帰分析(Linear regression with one variable)には以下の通り一つしか変数がないが、

h_\theta (X)=\theta_0 + \theta_1(x)

これが複数ある場合のデータセットでの分析を行える関数があるこれを重回帰分析と呼ぶ

新しく提示された定義
x_j^{(i)} = i件目の学習データのj番目のフィーチャ(変数)の値
x^{(i)} = i件目の学習データのフィーチャ(変数)ベクトル
m = 学習用のデータセットの数
n = フィーチャ(変数)の数
x_0 = 1として扱う

h_\theta (x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \cdots + \theta_n x_n

上記の関数はweek1で教わった行列を使った形に置き換え可能

\begin{align*}h_\theta(x) =
\theta^TX = 
\begin{bmatrix}\theta_0 \hspace{2em} \theta_1 \hspace{2em} ... \hspace{2em} \theta_n\end{bmatrix}\begin{bmatrix}x_0 \newline x_1 \newline \vdots \newline x_n\end{bmatrix}= \theta^T x\end{align*}

重回帰分析の場合の目的関数

変数がいくつ増えても以下の式で表すことができる


\begin{align*}& \text{repeat until convergence:} \; \lbrace \newline \; & \theta_j := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} \; & \text{for j := 0...n}\newline \rbrace\end{align*}

フィーチャースケーリング(Feature Scaling)とmean normalization

最急降下法(Gradient Descent)の収束パフォーマンスを上げることができる

学習データとして与えたもののレンジが違いすぎる場合、最急降下法のパフォーマンスに影響が出る。その改善として

学習データx_{(i)}のレンジを -1< x_{(i)} < 1または-0.5< x_{(i)} < 0.5になるように変換すると早く収束するようになる。

Feature Scaling

最大値で割る
x_i := \frac{x_i}{\text{max of}x_i }

mean normalization

平均が0に近づくように調整する
x_i := \frac{xi - (\text{mean of }x_i)}{(\text{range of }x_i)}

最急降下法の学習効率aの選び方について

大きすぎると収束せず、遅すぎると時間がかかる

Andrew先生のおすすめは0.001から初めて3倍ずつ増やしていき、
収束しない学習効率の一つ手前のものを利用する方法。


0.003→0.01→0.03

データのフィットさせる仮説関数の形式の選択肢はたくさんある

1時関数、2時間数、3時間数、対数
などのグラフのどれがデータに会うかは開発者が選ぶことができる。
今後自動でどの数式が最適か判別するアルゴリズムを紹介すると行っていたが、今は「選べる」ことを理解して入ればいい。

ただし、3時間数などを選んだ場合はよりフィーチャースケーリングが大事になってくる。
(値の範囲はn乗のオーダーで膨らんでいくため。)

正規方程式

最急降下法の他に仮説関数のパラメータを求める方法として正規方程式というものがある
正規方程式は以下の定義になる

\theta = (X^TX)^{-1}X^Ty

Octaveで計算するならこんな感じ

pinv(x'*x)*x'*y

メリット

- 正規方程式を使う場合はフィーチャースケーリングは不要。
- 繰り返し演算を行う必要がない。
- 学習効率aを選ぶ必要がない

デメリット

- フィーチャーが多いと遅い。
- (X^TX)^{-1}が計算可能である必要がある

Andrew先生によると、逆行列の計算は行・列数=nのときO(n^3)でスケールするが
現代のコンピュータだとn = 10000 まで増えた場合は正規方程式と最急降下法のどちらを使うか迷うらしい。