【初心者流】Courcera 機械学習 Week 2を解く! 内容:重回帰モデル

複数の説明変数


さて、前回に引き続き家の価格を予測することを例に取りましょう。

今回は家の価格の予測を手助ける変数が複数あります。

表 家の条件と価格

部屋の数 駅からの距離  駐車場有無 ・・・ 家の価格
3 1.5km 0 ・・・ 4500
4 1.0km 1 ・・・ 5000
5 0.5km 1 ・・・ 7000
・・・ ・・・ ・・・ ・・・ ・・・
・・・ ・・・ ・・・ ・・・ ・・・

(※駐車場は0:駐車場なし、1:駐車場あり)

こうやって見ると、家の価格を決めるヒントになる様々な特徴があればそれだけ価格予測の精度も上がるような気がしませんか?

さて、このとき仮定関数はパラメータθと特徴変数\(x\)を用いてどのように表されるのでしょうか。

次のようになります。

$$h_\theta(x)=\theta_0+\theta_1x+\theta_2x_2+\theta_3x_3+…+\theta_nx_n$$

n個の変数を持つずいぶん長ったらしい式になってしまいましたね。

この式を短くまとめてみましょう。

まずは、ただの表記方法なのですが上記式に\(x_0=1\)を追加してみましょう。これが大事なことなんです。

$$h_\theta(x)=\theta_0x_0+\theta_1x+\theta_2x_2+\theta_3x_3+…+\theta_nx_n$$

こうするとこにより長ったらしい式は行列によって表現することができます。

$$X=\begin{pmatrix} x_0 \\ x_1 \\x_2\\x_3\\…\\x_n \end{pmatrix}, \theta=\begin{pmatrix} \theta_0 \\ \theta_1 \\\theta_2\\\theta_3\\…\\\theta_n \end{pmatrix}$$

とすると、仮定関数は

$$h_\theta(x)=\theta^TX$$

と、行列の掛け算の形で表現することができます。ずいぶんすっきりしました。

ここで\(\theta^T\)のTは転置の意味で、

$$\theta=\begin{pmatrix} \theta_0 \\ \theta_1 \\\theta_2\\\theta_3\\…\\\theta_n \end{pmatrix}, \theta^T=\begin{pmatrix} \theta_0 & \theta_1 & \theta_2 & \theta_3 &… & \theta_n \end{pmatrix}$$

といった感じで行と列を入れ替えるという意味です。

さて、仮定関数の形もすっきりしたところで、複数の変数を持つ線形回帰モデルを見てみましょう。

重回帰分析


一度数式たちをまとめてみましょう。

仮定関数

$$h_\theta(x)=\theta^TX=\theta_0+\theta_1x+\theta_2x_2+\theta_3x_3+…+\theta_nx_n$$

目的関数

$$J(\theta_0, \theta_1,…\theta_n)=J(\theta)=\frac{1}{2m}\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2$$

そして、この目的関数を最小とするような\(\theta\)を探すために最急降下法を使うのでした。

\(\theta_0, \theta_1\)を最急降下法を用いて更新していくと、

$$\theta_0:=\theta_0-\alpha\frac{1}{m}\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})$$

$$\theta_1:=\theta_1-\alpha\frac{1}{m}\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}$$

となります。

では変数が複数がある場合はどうでしょうか。

$$\theta_j:=\theta_j-\alpha\frac{1}{m}\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j$$

\(j=0,1,…,n\)

このように、\(\theta_j\)の値が収束するまで更新を続けます。また、このとき収束の目安としては一回の更新で予測値の変化が\(10^{-3}\)となるまでが目安です。

学習率αについては単回帰分析の記事を参考にしてください。予測精度を高めるためにはこのαの調整も非常に重要なファクターとなっています。

さて、重回帰分析になると様々な特徴を扱うことになるので注意が必要です。

例えば、先ほどの表ですが、こう見てみると”駅からの距離”の数字だけやたら大きくなっていますね。

部屋の数 駅からの距離  駐車場有無 ・・・ 家の価格
3 1500m 0 ・・・ 4500
4 1000m 1 ・・・ 5000
5 500m 1 ・・・ 7000
・・・ ・・・ ・・・ ・・・ ・・・

これでは仮定関数の”駅からの距離”を示す特徴だけがとても大きく、アンバランスな数式となってしまいます。

このような事態を防ぐために、つまり、表にある特徴を似たような数値の範囲に変換するためにスケーリングという手法を用いて処理を行います。

スケーリング


スケーリングにはいくつか方法があります。例えば、各特徴ごとに最大値を見つけ、各特徴の要素をその最大値で割ります。

つまり、

No. 部屋の数 駅からの距離  駐車場有無 家の価格
1 3/5 1500/1500 0/1 4500
2 4/5 1000/1500 1/1 5000
3 5/5 500/1500 1/1 7000
最大値 1500 1 ・・・

とすることで上の表の各要素は\(-1\leq x_i \leq 1\)の範囲で表現することができます。

もう一つのやり方としては、各特徴\(x_i\)に対して

$$x_i=\frac{x_i-(x_iの平均値)}{(x_iの最大値)-(x_iの最小値)}$$

とするやり方もあります。

各特徴をスケーリングすることで、より早く収束する最急降下法を実装することができるため、特徴やデータ量が増えた際に有効となる。

実際には\(-1\leq x_i \leq 1\)でなくてもよく、\(-3\leq x_i \leq 3\)くらいの範囲に正規化することができれば経験的に問題ない、らしいです。

まとめ


今回は、複数の特徴を扱う場合にの下準備を行いました。

  • 重回帰モデルの紹介
  • 特徴のスケーリング

次回はいよいよ最急降下法を用いる学習率αの選び方やポリノミアルなモデリングについて紹介します!

次へ:Week2 その2 ポリノミアルなモデリング(多項式モデル)

  • 投稿が見つかりません。

コメント

タイトルとURLをコピーしました