Shingoの数学ノート

プログラミングと機械学習のメモ

線形回帰分析と最尤推定法

はじめに

先日のブログで説明しましたが、最尤推定法は機械学習で多く使用されるパラメータ推定法です。

月並みではありますが、今回は、線形回帰分析のパラメータを最尤推定法で解いてみたいと思います。

線形回帰分析

まずは、線形回帰分析の定義を行います。 yiy_iを目的変数、xijx_{ij}を説明変数とすると、線形回帰分析の式は以下のように表されます。

yi=β0+β1xi1++βkxik+εi y_i=\beta_0+\beta_1x_{i1}+\cdots+\beta_kx_{ik}+\varepsilon_i

ただし、εiN(0,σ2)\varepsilon_i\sim N(0,\sigma^2)で、独立同分布を仮定します。(εiN(0,σ2)\varepsilon_i\sim N(0,\sigma^2)は、平均0、分散σ2\sigma^2の正規分布にしたがっていることを表します。)

これにより、説明変数を定数だとみなすと、yiy_iは、yiN(β0+β1xi1++βkxik,σ2)y_i\sim N(\beta_0+\beta_1x_{i1}+\cdots+\beta_kx_{ik},\sigma^2) で、独立な確率変数と見なすことができます。(正確にいうと、xijx_{ij}で条件づけたyiy_iの条件付き確率を考えています。)

線形回帰分析と最尤推定法

さて、yiy_iの確率分布が決まったので、尤度関数を考えてみましょう。

その前に、最尤推定法のおさらいです。

最尤推定法は、「パラメータをいろいろ変えて今あるデータである確率密度関数の値を出してみて、最も高いものをもとのパラメータとしよう」という考えのもと推定していきます。当然パラメータは無限の可能性がありいちいち代入していられないので、パラメータを変数とみた関数を考え、これが最大となるパラメータを最尤推定値とします。このパラメータを変数とみた関数を尤度関数といいます。

ということなので確率密度関数を出しましょう。

パラメータは、偏回帰係数のβ0,,βk\beta_0,\cdots,\beta_kと、正規分布の分散σ\sigmaです。

L=f(y1,,ynβ0,,βk,σ)=i=1n12πσ2exp((yi(β0+β1xi1++βkxik))22σ2)L=f(y_1,\cdots,y_n|\beta_0,\cdots,\beta_k,\sigma)=\prod_{i=1}^n\frac{1}{\sqrt{2\pi\sigma^2}}exp(-\frac{(y_i-(\beta_0+\beta_1x_{i1}+\cdots+\beta_kx_{ik}))^2}{2\sigma^2})

対数尤度関数を考えると、

logL=n2log(2πσ2)12σ2i=1n(yi(β0+β1xi1++βkxik))2logL = -\frac{n}{2}log(2\pi\sigma^2) - \frac{1}{2\sigma^2}\sum_{i=1}^n(y_i-(\beta_0+\beta_1x_{i1}+\cdots+\beta_kx_{ik}))^2

ここで、β0,,βk\beta_0,\cdots,\beta_kを求めることを考えると、対数尤度関数を最大化するには、以下の式を最小化すれば良いことがわかります。

E=i=1n(yi(β0+β1xi1++βkxik))2 E=\sum_{i=1}^n(y_i-(\beta_0+\beta_1x_{i1}+\cdots+\beta_kx_{ik}))^2

これ、実は最小二乗法と式が同じです。つまり、最小二乗法は、最尤推定法の観点からも妥当なパラメータ推定方法であることがわかります。

最尤推定値を求めてみる

一応EEを最小化するβ0βk\beta_0\cdots\beta_kも求めておきます。

基本は、全てのiiについてEEβi\beta_iで偏微分して0となるβi\beta_iを求めます。ちゃんとやるなら、「偏微分=0」だけでは最小値とは言えず、Eの凸性を議論する必要があります。(下記の「凸関数の最小化」が参考になります。)

http://www2.econ.tohoku.ac.jp/~ksuzuki/teaching/2005/ch5.pdf

ここでは、この証明は省きます。(感覚的にはEEβi\beta_iに対して2次の多項式で、2次の多項式はは凸関数となるため、凸性を持つことが想像できます。ヘッセ行列を計算してみてもいいでしょう。)

さて、一つずつβi\beta_iで偏微分するのは面倒臭いので、β=(β0βk)\mathbf \beta=\left(\begin{array}{c}\beta_0\\\vdots\\\beta_k\end{array}\right)y=(y1yn)\mathbf y=\left(\begin{array}{c}y_1\\\vdots\\y_n\end{array}\right)X=(1x11x1k1xn1xnk)\mathbf X=\left( \begin{array}{cccc} 1 & x_{11} & \cdots & x_{1k} \\ \vdots & \vdots & \vdots & \vdots \\ 1 & x_{n1} & \cdots & x_{nk} \end{array} \right)として、一気に計算します。

E=(yXβ)T(yXβ)=yTyyTXββTXTy+βTXTXβ E=(\mathbf y -\mathbf X\mathbf \beta)^T(\mathbf y -\mathbf X\mathbf \beta)=\mathbf y^T \mathbf y-\mathbf y^T\mathbf X\mathbf \beta-\mathbf \beta^T \mathbf X^T \mathbf y +\mathbf \beta^T \mathbf X^T \mathbf X\mathbf \beta

であり、以下の1.2の公式を使用すると、以下となります。

https://qiita.com/AnchorBlues/items/8fe2483a3a72676eb96d

β(yTXβ)=β(βTXTy)=XTy \frac{\partial}{\partial \mathbf\beta}(\mathbf y^T\mathbf X\mathbf \beta)=\frac{\partial}{\partial \mathbf\beta}(\mathbf \beta^T \mathbf X^T \mathbf y)=\mathbf X^T \mathbf y
β(βTXTXβ)=2(XTX)β\frac{\partial}{\partial \mathbf\beta}(\mathbf \beta^T \mathbf X^T \mathbf X\mathbf \beta)=2(\mathbf X^T \mathbf X)\beta

したがって、以下が導けます。

βE=2XTy+2(XTX)β=0 \frac{\partial}{\partial \mathbf\beta}E=-2\mathbf X^T \mathbf y+2(\mathbf X^T \mathbf X)\beta=0
β=(XTX)1XTy\beta=(\mathbf X^T \mathbf X)^{-1}\mathbf X^T\mathbf y

これで線形回帰の解析解が求められました。

Pythonによる線形回帰

本当に一致するの?と疑問に思う人もいるかもしれないので、実際に計算してみましょう。

pythonのモジュール(statsmodels使用)

python
import pandas as pd
from sklearn.datasets import load_boston
import statsmodels.api as sm 

#「boston house price」というデータをロード 
boston = load_boston() 
df = pd.DataFrame(boston.data, columns=boston.feature_names) 
df['PRICE'] = boston.target 

# 変数「CRIM」から「LSTAT」を説明変数として、「PRICE」を予測する 
X = df.drop('PRICE', 1)
y = boston.target 

# add_constantで定数項を挿入 
model = sm.OLS(y, sm.add_constant(X)) 
result = model.fit() 
result.summary()

結果:

numpyで先ほど求めた解析解を計算

python
import numpy as np

X_add = np.array(sm.add_constant(X))
beta = np.linalg.inv((X_add.T @ X_add)) @ X_add.T @ y
pd.Series(beta, index=sm.add_constant(X).columns)

結果:

python
const      36.459488 
CRIM       -0.108011 
ZN          0.046420 
INDUS       0.020559 
CHAS        2.686734 
NOX       -17.766611 
RM          3.809865 
AGE         0.000692 
DIS        -1.475567 
RAD         0.306049 
TAX        -0.012335 
PTRATIO    -0.952747 
B           0.009312 
LSTAT      -0.524758 
dtype: float64

coefの部分の結果は一致していますね。

線形回帰のパラメータ推定値の性質

最尤推定値の統計的性質より、一致性と漸近正規性を持ちます。昔のブログで書いた線形回帰分析のパラメータが一致性を持つというのは、パラメータが最尤推定値であることからも証明することができます。

まとめ

線形回帰分析において、最尤推定法によるパラメータ推定と最小二乗法によるパラメータ推定は同じ結果になることがわかります。最小二乗法は最尤推定法の観点からも妥当な推定法であると言えます。

他のポアソン回帰やロジスティック回帰等の一般線形回帰分析も最尤推定法が元になっています。これについても記事をかけたらなと思います。

Comments

Loading comments...