COUSERA Machine Learning Week02
By: Atsushi Ito
Tags: Vector, Octave, Linear Regression, Matrix, Machine Learning

1週目の記事もあるので良かったら読んでみてください。

前回までは簡易にするために変数を一つしか持たない単回帰を取り扱ってきました。今回からは特徴（変数）が複数ある多量変の線形回帰を扱っていきます。

前述しましたが、今回から特徴が複数ある線形回帰を扱います。特にこの節では記法の説明をしておこうと思います。

上記のように書き表される多変量の線形回帰は x0 を1とすることで、行列を使って書き換えることができます。

上記の T の文字は行列の転置を意味します。転置は、簡単に説明すると行を列として置き換えて、新しい行列を作ることです。詳しい説明は下記の記事に譲ります。

このように、行列を使って書き表すことによって、可読性が上がります。更に、行列の計算を備えているプログラミング言語では、メモリの使用効率も上がります。

最後にこの節のサマリーを載せておきます。

We now introduce notation for equations where we can have any number of input variables.

The multivariable form of the hypothesis function accommodating these multiple features is as follows:

Using the definition of matrix multiplication, our multivariable hypothesis function can be concisely represented as:

In order to develop intuition about this function, we can think about θ0​ as the basic price of a house, θ1​ as the price per square meter, θ2​ as the price per floor, etc. x1​ will be the number of square meters in the house, x2​ the number of floors, etc.

This is a vectorization of our hypothesis function for one training example; see the lessons on vectorization to learn more.

この節では、多変量の線形回帰における、最急降下法について説明します。前回までは、変数 x0 と x1 だけ（n=1）をもつ線形回帰に関して、扱っていました。ここで x0 は 1 を表すので、表記を省略できます。それが下記の数式です。

多変数の場合（n>1）の場合は、これと同様に偏微分を行うことによって、下記の数列のように書き表されます。

これを書き換えると下記のな数式になります。

以上より、多変数の線形回帰の最急降下法は上記の数式で表現できます。

この節では、最急降下法を使う際のテクニックとして、フィーチャースケーリングというものを説明します。詳しい説明は下記の記事に譲りますが、どうしてフィーチャースケーリングをする必要があるのかを説明しようと思います。

フィーチャースケーリングを行う目的は、最急降下法を最も早く収束させることです。x0 から xn までの教師データに、それぞれ極端な範囲があったとします。ある変数 xi は 0<xi<5 の範囲で値が変わり、別の変数 xj は 0<xj<2000 の範囲で値が変わるとします。このように、変数の値が極端異なると、その式のグラフより歪な形になります。これは、最急降下法を使う際に、計算の手間を増やすことになります。そのために、特徴量の範囲を調整することで、範囲をおおよそ -1<x<1 に収まるようにします。注意点としては、-0.00001<x<0.00001 のような極端な値になってしまってダメです。これが上記記事内の正規化に該当します。

最後にこの節のサマリーを載せておきます。

We can speed up gradient descent by having each of our input values in roughly the same range. This is because θ will descend quickly on small ranges and slowly on large ranges, and so will oscillate inefficiently down to the optimum when the variables are very uneven.

The way to prevent this is to modify the ranges of our input variables so that they are all roughly the same. Ideally:

−1 ≤ x_{(i)}x(i)​ ≤ 1

or

−0.5 ≤ x_{(i)}x(i)​ ≤ 0.5

These aren’t exact requirements; we are only trying to speed things up. The goal is to get all input variables into roughly one of these ranges, give or take a few.

Two techniques to help with this are feature scaling and mean normalization. Feature scaling involves dividing the input values by the range (i.e. the maximum value minus the minimum value) of the input variable, resulting in a new range of just 1. Mean normalization involves subtracting the average value for an input variable from the values for that input variable resulting in a new average value for the input variable of just zero. To implement both of these techniques, adjust your input values as shown in this formula:

xi := ​xi​−μi/si​​

Where μi​ is the average of all the values for feature (i) and si​ is the range of values (max — min), or si​ is the standard deviation.

Note that dividing by the range, or dividing by the standard deviation, give different results. The quizzes in this course use range — the programming exercises use standard deviation.

For example, if x_ixi​ represents housing prices with a range of 100 to 2000 and a mean value of 1000, then, xi :=1900price−1000/1900​.