アラフォーからの機械学習

アラフォーです。機械学習や統計学の解説記事を書いていきます

線形単回帰モデルを数式で理解する

線形単回帰モデル

線形単回帰(Simple linear regression)モデルは1つの入力(変数)を用いて予測をするものであり、回帰モデルの中でも最もシンプルなものです。シンプルであるがゆえに入力と出力との関係を解釈しやすいモデルです。また、特に訓練データの数が少ない場合においては、非線形モデルよりも良い性能を発揮することもあります。そのため、回帰モデルにおいて基礎となるモデルと考えられますので、その仕組みについて把握しておくこと、また使いこなせることは非常に重要であると考えております。

今回はこの線形単回帰モデルを数式を用いて解説を行っていこうと思います。

線形単回帰モデルの概観

入力をx、出力をyとしたときに、この2つの変数の間に直線で表せるような関係性があるとします。たとえば以下の図のような関係です。

f:id:matakanobu:20200528174617p:plain
データの散布図

これは直線の関係性があるといって良いと考えられますので、線形単回帰モデルを用いることでxyを予測することが可能になります。ここで、直線を引くよりも、たとえば各点を結ぶジグサグの線を引くほうがより良い性能のモデルになるのではないのかという考えもあるかもしれません。しかしながら、それは間違いになります。機械学習においてはいわゆる過学習というものになり、それは交差検証を行うことで間違いであることがわかります。そして、間違いである理由は線形単回帰モデルはいわゆる統計モデルの一種になりますが、観測されるデータにはランダムの誤差\epsilonが含まれているからです。つまり統計モデルで考えた場合、以下のような関数からデータは生成されたと考えます。


y = f(x) + \epsilon

今回は、このf(x)を線形単回帰モデルで推定することにします。これはつまりyには誤差が足されているというわけですから、線形単回帰モデルによって推定された直線上にすべてのデータが乗ることはありえないわけで、直線付近にデータが散らばるのが適切なのです。この誤差\epsilonは予測な不可能な変数(確率変数)です。もう少し正確に言うと、モデルで予測をしたときに、予測しきれない部分を誤差としているということになります。 さて、線形単回帰モデルは1変数の直線ですので、


y = ax + b

という中学校で習った1次関数を用います。aが傾きでbが切片でした。ただ、線形単回帰モデルでは式が少しだけ異なっていて、こちらは誤差項を考慮しなければなりません。したがいまして、下式のようになります。


y = ax + b + u

また、線形単回帰モデルでは一般的にabではなく、\alpha\betaを用います。くわえて、全部でn個のデータ(x_1のときy_1x_2のときy_2、...、x_nのときy_n)が観測されたとすると、線形単回帰モデルの数式は


y_i = \alpha + \beta x_i + u_i

と表されます。それぞれの文字には以下のように名前がついています。

  • y_i : 応答変数(目的変数, 従属変数)(response variable)
  • x_i : 説明変数(独立変数)(explanatory variable)
  • \alpha : 切片項(intercept term)
  • \beta : 回帰係数(regression coefficient)
  • u_i : 誤差項(error term)

線形単回帰モデルの仮定

意外と知られていないかもしれないのですが、この線形単回帰モデルには以下の仮定が置かれています。

  1. 説明変数x_iは確率変数ではなく、定数である
  2. 誤差項u_iの期待値は0である(E[u_i]=0)
  3. 誤差項同士は無相関である(E[u_i, u_j]=0, i \neq j)(つまり自己相関は0である)
  4. 誤差項の分散は均一である(Var(u_i)=\sigma^2)

1は目的変数のy_iのみを確率変数として扱うということ、3は時系列性を持ってしまっているということです。これは線形単回帰モデルが時系列データを扱えないというわけはなく、誤差項に時系列性を持たせないように説明変数を選択すれば可能になります。 これらの仮定から外れたデータに対して線形単回帰モデルを適用したときに、どのようなことが起こるのかは今度実験的に解説したいと思います。

回帰係数を求める方法(回帰係数の推定)

さて、得られたデータをこのモデルに当てはめるにはどうすればいいかを考えてみます。これはつまり、線形単回帰モデルのパラメータである\alpha\betaを得られたデータから求めることになります。機械学習で言えば訓練(学習)です。誤差項の無い1次関数であれば2点(2データ)あれば、連列方程式を用いて切片と傾きを計算できました。しかし誤差項がある線形単回帰モデルではそう単純な話でもありません。まずは下の2つの直線を見比べてみてください。

これは3データに対して線形単回帰モデルを適用したものとお考えください。どちらの方がより適切と言えるでしょうか。直感的には右側の方が良さそうです。良さそうでは評価が曖昧ですので、その理由を定量的に評価できるように数式化してみましょう。

数式化するにあたって、まずなぜ直感的に右側の方が良さそうなのかを考えてみます。それは各観測データがモデルの直線に近いからであると思います。それを図示してみます。

緑色の丸が観測データ、青色の直線がモデル、赤色の矢印がモデルと観測データとの誤差を表しています。こう考えると、直線を引く上で(モデルを推定する上で)大事なことは誤差をなるべく小さくすることだとわかります。誤差は「観測値」と「モデルによる予測値」の差分なので数式で表すと、


y_i - (\alpha + \beta x_i)

ここで注意しなければならないのが、観測値が直線の上にあるか下にあるかで誤差の符号が変わってしまうので、絶対値を取るか2乗してプラスに統一する必要があります。ここでは、後の計算が楽になるので2乗することにします。すべての観測値の分だけ誤差を2乗し、それらを足し合わせます。

\displaystyle{
h(\alpha, \beta) = \sum_{i=1}^{n} (y_i - \alpha - \beta x_i)^2
}

これを最小化するような\alpha\betaを求めれば良いことになります。このアプローチを最小二乗法と呼びます。h(\alpha, \beta)\alpha\betaについて最小化するので、それぞれについて偏微分して0とおいた連立方程式を解けば求まります。

最小二乗法の計算

実際に\alpha\betaを求めてみます。もっと効率が良い方法があるとは思うのですが、愚直に計算していってみます。

\displaystyle{
    h(\alpha, \beta) = \sum_{i=1}^{n} (y_i - \alpha - \beta x_i)^2 \tag{1}
}

この関数を\alpha\betaについて偏微分します。

\displaystyle{
    \begin{cases}
        \frac{\partial h(\alpha, \beta)}{\partial \alpha} &= -2 \sum (y_i - \alpha - \beta x_i) \\
        \frac{\partial h(\alpha, \beta)}{\partial \beta} &= -2 \sum x_i(y_i - \alpha - \beta x_i)
    \end{cases}
}

イコール0と置きます。

\displaystyle{
    \begin{cases}
        -2 \sum (y_i - \alpha - \beta x_i) = 0 \\
        -2 \sum x_i(y_i - \alpha - \beta x_i) = 0
    \end{cases}
}

式を変形して\alpha\betaを求めていきます。

\displaystyle{
    \begin{cases}
        \sum (y_i - \alpha - \beta x_i) = 0 \\
        \sum x_i(y_i - \alpha - \beta x_i) = 0
    \end{cases}
}

\sumを外します( \sum^n_{I=1} \alpha = \alpha + \alpha +...+ \alpha = n \alpha; \alphaをn回足す)。

\displaystyle{
    \begin{cases}
        \sum y_i - n \alpha - \beta \sum x_i) = 0 \\
        \sum x_i y_i - \alpha \sum x_i - \beta \sum x_i^2 = 0
    \end{cases}
}

nはデータ数なのでゼロはありえないため(n\ne0)、nで割ります。

\displaystyle{
    \begin{cases}
        \frac{1}{n} \sum y_i - \alpha - \beta \frac{1}{n} \sum x_i = 0 \\
        \frac{1}{n} \sum x_i y_i - \alpha \frac{1}{n} \sum x_i - \beta \frac{1}{n} \sum x_i^2 = 0
    \end{cases}
}

ここでx_iy_iの平均値は以下のように計算ができるので、

\displaystyle{
    \frac{1}{n}\sum^n_{i=1} x_i = \bar{x},\ \frac{1}{n}\sum^n_{i=1} y_i = \bar{y} \tag{2}
}

\bar{x}\bar{y}を用いると、

\displaystyle{
    \begin{cases}
        \bar{y} - \alpha - \beta \bar{x} = 0 \\
        \alpha \bar{x} + \frac{1}{n} \beta \sum x_i^2 = \frac{1}{n} \sum x_i y_i \tag{3}
    \end{cases}
}

したがいまして、\alphaの推定量\hat{\alpha}

\displaystyle{ 
    \hat{\alpha} = \bar{y} - \hat{\beta} \bar{x} \tag{4}
}

ここで\hat{\beta}\betaの推定量です。では\betaを求めていきます。(3)式に(4)式を代入します。

\displaystyle{
    \begin{aligned}
    \bar{x} \bar{y} - \beta \bar{x}^2 + \frac{1}{n} \beta \sum x_i^2 &= \frac{1}{n} \sum x_i y_i \\ \cr
    -n \bar{x}^2 \beta + \sum x_i^2 \beta &= \sum x_i y_i - n \bar{x} \bar{y} \\ \cr
    \left ( \sum x_i^2 - n \bar{x}^2 \right ) \beta &= \sum x_i y_i - n \bar{x} \bar{y} \\
    \end{aligned}
}

\sumでくくります。添字iが付いていない文字はnが外に出ます。

\displaystyle{
    \begin{eqnarray}
        \sum \left (x_i^2 - \bar{x}^2 \right ) \beta &= \sum \left ( x_i y_i - \bar{x} \bar{y} \right )  \\ \cr
        \beta &= \frac{\sum \left ( x_i y_i - \bar{x} \bar{y} \right )}{\sum \left ( x_i^2 - \bar{x}^2 \right )} \tag{5}
    \end{eqnarray}
}

だいぶそれらしくなってきました。続いて分子と分母をそれぞれ変形します(天下り式ではありますが・・・)。まず分母です。

\displaystyle{
    \begin{aligned}
        \sum \left ( x_i^2 - \bar{x}^2 \right ) &= \sum \left ( x_i^2 - 2x_i \bar{x} + \bar{x}^2 + 2 x_i \bar{x} - 2 \bar{x}^2 \right ) \\ \cr
        &= \sum \left ( x_i^2 - 2x_i\bar{x}+\bar{x}^2 \right ) + 2\bar{x} \sum x_i - 2n \bar{x}^2 \\ \cr
        &= \sum \left ( x_i^2 - 2x_i\bar{x}+\bar{x}^2 \right ) + 2n \bar{x}^2 - 2n \bar{x}^2 \\ \cr
        &= \sum \left ( x_i - \bar{x} \right )^2
    \end{aligned}
}

なお、2行目から3行目への変形は平均値の式である(2)式を用いています。次は分子です。

\displaystyle{
    \begin{aligned}
        \sum \left ( x_i y_i - \bar{x} \bar{y} \right ) &= \sum \left ( x_i y_i - \bar{y} x_i - \bar{x} y_i + \bar{x} \bar{y} + \bar{y}x_i + \bar{x} y_i -2 \bar{x} \bar{y} \right ) \\ \cr
        &= \sum \left ( x_i y_i - \bar{y} x_i - \bar{x} y_i + \bar{x} \bar{y} \right ) +n \bar{x} \bar{y} +n \bar{x} \bar{y} -2n \bar{x} \bar{y} \\ \cr
        &= \sum \left ( x_i - \bar{x} \right ) \left ( y_i - \bar{y} \right )
    \end{aligned}
}

したがいまして、(5)式は、

\displaystyle{
    \beta = \frac{\sum \left ( x_i - \bar{x} \right ) \left ( y_i - \bar{y} \right )}{\sum \left ( x_i - \bar{x} \right )^2} \tag{6}
}

とてもキレイになりました!さらに、以下の記号を用意します。

\displaystyle{
    \begin{aligned}
        Q_{xx} &= \sum \left ( x_i - \bar{x} \right )^2 \\ \cr
        Q_{xy} &= \sum \left ( x_i - \bar{x} \right ) \left ( y_i - \bar{y} \right )
    \end{aligned}
}

すると、\betaの推定量

\displaystyle{
    \hat{\beta} = \frac{Q_{xy}}{Q_{xx}} \tag{7}
}

という形になります。\alphaの推定量と並べて書いてみます。

\displaystyle{
    \hat{\alpha} = \bar{y} - \hat{\beta} \bar{x}, \ \hat{\beta} = \frac{Q_{xy}}{Q_{xx}} 
}

定量の考察

求めた推定量の数式について少し考えてみます。 まず\hat{\alpha}です。

\displaystyle{ 
    \hat{\alpha} = \bar{y} - \hat{\beta} \bar{x}
}

\betaの推定量が含まれているため切片の値は\hat{\beta}に依存していますが、xの平均値がかけられています。説明変数であるxを中心化もしくは標準化すると\bar{x}=0となるため切片は\bar{y}つまり目的変数の平均値です。さらにyを中心化もしくは標準化すると回帰の直線は原点(0, 0)を通ります。

\displaystyle{
    \hat{\beta} = \frac{\sum \left ( x_i - \bar{x} \right ) \left ( y_i - \bar{y} \right )}{\sum \left ( x_i - \bar{x} \right )^2}
}

つづいて\hat{\beta}です。こちらは、分母がxの分散、分子がxyの共分散になっています。共分散は2変数の連動性を表しているもので、データが標準化されている場合は相関係数と一致します。よってxyとで無関係(無相関)であれば分子が0になりますので、回帰係数つまり直線の傾きは0になります。

参考

現代数理統計学の基礎