Coursera Machine Learning
Week2【学習メモ】【機械学習】
スタンフォード大学のAndrew Ng氏が手掛ける機械学習講義の学習メモ。
機械学習のスキルと知識を付けるために2020/10/30からスタート。全講義を終えるのに11週間をベース(1日1~2時間ペース?)としていますが、気にせずに理解できているか確認しながら進めていこうと思います。
Ⅰ.はじめに
今回のweek2は二日間を講義に一日をweek1の加筆とweek2の執筆に費やしました。今回の講義からプログラミングのテストが導入されており、その説明が多かった気がします。
Ⅱ.Linear Regression with Multiple Variables
octaveのインストールをしました。バージョン4.0.0はインストールしないでねということでした。私はwindowsなのでwindowsバージョンをインストールしました。
複数の特徴がある場合
前回は特徴量は一つだけでしたが、今回は複数の特徴量が登場します。重回帰モデルと言います。そのため、仮説に出てくる変数も当然増えます。
下記が新たな式です。
\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+・・・+\theta_nx_n\)
式を簡略化するため、\(x_0\)を1と定義します。
また、上記の式は
\(\theta=
\left(
\begin{array}{ccc}
\theta_0 \\
\theta_1 \\
\vdots \\
\theta_n
\end{array}
\right)
x=\left(
\begin{array}{ccc}
x_0 \\
x_1 \\
\vdots \\
x_n
\end{array}
\right)
\)
この二つのベクトルの内、\(\theta\)のベクトルを転置し計算することで成り立ちます。
\(\theta=\left(
\begin{array}{ccc}
\theta_0 & \theta_1 & \cdots & \theta_n
\end{array}
\right)
x= \left(
\begin{array}{ccc}
x_0 \\
x_1 \\
\vdots \\
x_n
\end{array}
\right)
\)
こうすることで\(h_\theta(x)=\theta^TX\)というよりわかりやすい式になります。
最急降下法のパターン
特徴が1つ以上のときの最急降下法の式は以下に少し変わります。
\(\theta_j := \theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}(({h}_\theta(x^{(i)} – y^{(i)})x_0^{(i)})\)
\(\theta_0 := \theta_0-\alpha\frac{1}{m}\sum_{i=1}^{m}(({h}_\theta(x^{(i)} – y^{(i)})x_0^{(i)})\)
\(\theta_1 := \theta_1-\alpha\frac{1}{m}\sum_{i=1}^{m}(({h}_\theta(x^{(i)} – y^{(i)})x_1^{(i)})\)
\(\theta_2 := \theta_2-\alpha\frac{1}{m}\sum_{i=1}^{m}(({h}_\theta(x^{(i)} – y^{(i)})x_2^{(i)})\)
Feature Scaling
Feature Scalingとは特徴量の範囲(以下スケール)を一定幅に収めることです。データセットの特徴量間のスケールが異なることが多いそうで、そのときに異なるスケールのデータセットをモデルで学習させた場合に上手くいかない可能性があるみたいです。そのため、データセットの特徴量間のスケールを合わせるようにするのがFeature Scalingです。
講義では正規化と書かれていましたが、標準化も話していたので、まとめたいと思います。
Feature Scalingは主に下記の2種類です。
・正規化
・標準化
正規化
正規化は特徴量の範囲を一定の値に収めます。
\(x_{norm, i} = \frac{x_i-x_{min}}{x_{max}-x_{min}}\)
\(x_{norm, i}\)が正規化された\(x\)です。
このように変換すると、\(Y\)の最大値は1、最小値は0になります。
標準化
\(x_i := \frac{x_i-\mu_i}{s_i}\)
\(\mu_i\)は平均、\(s_i\)は標準偏差です。尚、\(s_i\)は範囲の差でも可能です(max-min)。
このように変換すると、\(Y\)の平均は0、分散(及び標準偏差)は1となる。
スケーリングの範囲
基本的に\(-1\leq x_i\leq 1\)に近い数値なら大丈夫みたいと話していました。
\(-2\leq x_i\leq 0.5\)や\(0\leq x_i\leq 3\)、\(-0.5\leq x_i\leq 0.5\)は〇
\(-100\leq x_i\leq 100\)や\(-0.0001\leq x_i\leq 0.0001\)のような大きすぎたり小さすぎたりするものは×みたいです。
Learning Rate
イテレーション回数に対して誤差がグラフ上で収束しているか確認。
一回の試行で誤差が一定以上減っているか確認する。
Andrew先生は0.001→0.01→0.1→1のように学習率を選択しつつ結果を確認しながらトライしていくと話していました。
多項式回帰
多項式回帰の式変形です。2次関数だと逆凸型(山のようなグラフ)のグラフになってしまい、線形が戻ってきてしまうため、ルートを取り入れることで戻ってこないようにしています。
\(h_\theta(x)=\theta_0+\theta_1 x_1+\theta_2 x_1^2+\theta_3 x_1^3\)
\(h_\theta(x)=\theta_0+\theta_1 x_1+\theta_2\sqrt{x_1}\)
正規方程式
方程式で一発で最適なパラメータ\(\theta\)が決まるというものです。
\(\theta = (X^TX)^{-1} X^Ty\)
octaveではpinv(X’*X)*X’*yで求められます。
正規方程式で求める場合、スケーリングは考えなくて良いそうです。
最急降下法と正規方程式との違い
最急降下法(Gradient Descent) | 正規方程式(Normal Equation) |
---|---|
Learning Rateを選択する必要がある | Learning Rateを選択する必要がない |
何度も繰り返し学習が必要がある | 繰り返す必要はない |
パラメータ数が多くても機能する | パラメータ数が多いと遅い |
一番下のパラメータの数ですが、先生は特徴数が1000個くらいまでは正規方程式を、10000個で最急降下法を使うか悩むらしいです。最初の内は正規方程式で一発で求めることが多くなりそうかな?
逆行列がない場合でもoctaveでpinv(X’*X)*X’*yをすると近似値を見つけてくれますが、その時は以下の2点に注意です。
1.Redundant Features: 複数の関連性のある特徴量
2.Too many features(e.g.\(m\leq n\)): 特徴量が多すぎる場合には減らすか標準化を行う
Ⅲ.さいごに
week2ではweek1を活用した内容でした。今回は変数の数が複数あるときの場合や、最急降下法の他に正規方程式というものを学びました。また、week2最後の課題ではプログラミングで穴埋め実装を行い、octaveやモデルの実装を考えながらコードにすることができました。
当然ですが課題はすべて英語ですが、書かれている内容はなんとなくわかるようになってきました(まだ少し翻訳した時の日本語の意味合いが違う時がありますが)。ブログに数式を記述するのも時間はかかりますが、ある程度こちらも慣れてきました。並行してudemyのPython講座も受講しているので、良い気分転換になっています。英語での講義を受けた後に日本語の講座を受けるとなぜかすごく理解できるような気がします(笑)
次回はweek3です。引き続きがんばっていきます。