0. 前提知識
「https://qiita.com/AnchorBlues/items/8fe2483a3a72676eb96d 」
こちらで、ベクトルの微分とは何かを先に頭に入れておいてほしいです。以後、この記事から数式を引用する際、「ソースから引用」という言葉を用います。
1. 重回帰分析モデルの線形代数による表現
まず、重回帰分析では、複数の説明変数から目的変数を予測するモデルを考えます。これは、線形代数を用いると非常に簡潔に表現できます。
$n$個のデータサンプルがあり、それぞれが $p$個の説明変数を持つとします。目的変数を $y$、説明変数を $x_1, x_2, \dots, x_p$ としたとき、線形回帰モデルは以下のようになります。
$y_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \dots + \beta_p x_{ip} + \epsilon_i$
ここで、$i$ はデータサンプルのインデックス($i=1, \dots, n$)です。$\beta_0, \beta_1, \dots, \beta_p$ はモデルの係数(回帰係数)であり、$\epsilon_i$ は各サンプルにおける誤差(または残差)です。
この $n$個の式全体を、ベクトルと行列を用いて表現します。
-
目的変数ベクトル: $n$個の目的変数の値を並べたベクトル $\boldsymbol{y} \in \mathbb{R}^n$
$\boldsymbol{y} = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{pmatrix}$ -
説明変数行列 (計画行列 または デザイン行列): 各サンプルの説明変数に、切片項 $\beta_0$ に対応する1を加えて並べた行列 $X \in \mathbb{R}^{n \times (p+1)}$
$X = \begin{pmatrix} 1 & x_{11} & x_{12} & … & x_{1p} \\ 1 & x_{21} & x_{22} & \dots & x_{2p} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n1} & x_{n2} & \dots & x_{np} \end{pmatrix}$ -
係数ベクトル: $p+1$個の回帰係数を並べたベクトル $\boldsymbol{\beta} \in \mathbb{R}^{p+1}$
$\boldsymbol{\beta} = \begin{pmatrix} \beta_0 \\ \beta_1 \\ \vdots \\ \beta_p \end{pmatrix}$ -
誤差ベクトル: $n$個の誤差を並べたベクトル $\boldsymbol{\epsilon} \in \mathbb{R}^n$
$\boldsymbol{\epsilon} = \begin{pmatrix} \epsilon_1 \\ \epsilon_2 \\ \vdots \\epsilon_n \end{pmatrix}$
これらのベクトルと行列を用いると、重回帰モデルは以下の非常に簡潔な線形代数の形式で表されます。
$\boldsymbol{y} = X\boldsymbol{\beta} + \boldsymbol{\epsilon}$
私たちの目標は、与えられたデータ($X$と$\boldsymbol{y}$)から、未知の係数ベクトル $\boldsymbol{\beta}$ を推定することです。
2. 最小二乗法の目的関数
重回帰分析における係数ベクトル $\boldsymbol{\beta}$ の推定は、通常、「最小二乗法」という基準に基づいて行われます。最小二乗法の考え方は、「観測された目的変数ベクトル $\boldsymbol{y}$ と、モデルによって予測される値 $X\boldsymbol{\beta}$ との間の誤差ベクトル $\boldsymbol{\epsilon}$ の**長さ(ノルム)**の2乗を最小にする」というものです。
誤差ベクトル $\boldsymbol{\epsilon}$ は、モデル式から $\boldsymbol{\epsilon} = \boldsymbol{y} - X\boldsymbol{\beta}$ となります。
誤差ベクトルの長さ(ユークリッドノルム)の2乗は、そのベクトルと自身の転置との積として定義されます。
$||\boldsymbol{\epsilon}||^2 = \boldsymbol{\epsilon}^T \boldsymbol{\epsilon}$
したがって、最小二乗法の目的関数は、誤差ベクトルのノルムの2乗、つまり二乗誤差の合計を最小化することになります。これをスカラー関数 $L(\boldsymbol{\beta})$ として定義します。
$L(\boldsymbol{\beta}) = ||\boldsymbol{y} - X\boldsymbol{\beta}||^2 = (\boldsymbol{y} - X\boldsymbol{\beta})^T (\boldsymbol{y} - X\boldsymbol{\beta})$
このスカラー関数 $L(\boldsymbol{\beta})$ は、係数ベクトル $\boldsymbol{\beta}$ の各要素 $\beta_0, \beta_1, \dots, \beta_p$ に依存する関数です。最小二乗法の目標は、この関数 $L(\boldsymbol{\beta})$ の値を最小にするベクトル $\boldsymbol{\beta}$ を見つけることです。
3. ベクトル微分による目的関数の最小化
スカラー関数を最小化するには、その関数の勾配(微分した結果のベクトル)を計算し、それがゼロベクトルになる点を見つけます。これは、多変数関数の最小化における一般的な手法であり、線形代数におけるベクトル微分がそのツールとなります。
最小二乗法の目的関数 $L(\boldsymbol{\beta}) = (\boldsymbol{y} - X\boldsymbol{\beta})^T (\boldsymbol{y} - X\boldsymbol{\beta})$ は、ソース に記載されているスカラーのベクトル微分公式の形式によく似ています。ソースの公式は $\frac{ \partial }{ \partial \boldsymbol{x} } \left(A\boldsymbol{x} - \boldsymbol{b} \right)^T \left(A\boldsymbol{x} - \boldsymbol{b} \right) = 2A^T \left( A \boldsymbol{x} -\boldsymbol{b} \right)$ です。
ここで、ソースの公式のベクトル $\boldsymbol{x}$ を私たちの係数ベクトル $\boldsymbol{\beta}$ に、行列 $A$ を計画行列 $X$ に、ベクトル $\boldsymbol{b}$ を目的変数ベクトル $\boldsymbol{y}$ に対応させます。
すると、目的関数 $L(\boldsymbol{\beta})$ をベクトル $\boldsymbol{\beta}$ で微分する計算は、ソース の公式を用いて以下のように実行できます。
$\frac{ \partial L }{ \partial \boldsymbol{\beta} } = \frac{ \partial }{ \partial \boldsymbol{\beta} } (\boldsymbol{y} - X\boldsymbol{\beta})^T (\boldsymbol{y} - X\boldsymbol{\beta})$
ここで、$(\boldsymbol{y} - X\boldsymbol{\beta})^T (\boldsymbol{y} - X\boldsymbol{\beta}) = (X\boldsymbol{\beta} - \boldsymbol{y})^T (X\boldsymbol{\beta} - \boldsymbol{y})$ であることを利用すると、ソースの公式を直接適用できます。
$\frac{ \partial }{ \partial \boldsymbol{\beta} } (X\boldsymbol{\beta} - \boldsymbol{y})^T (X\boldsymbol{\beta} - \boldsymbol{y}) = 2X^T (X\boldsymbol{\beta} - \boldsymbol{y})$
最小値を求めるためには、この勾配ベクトルをゼロベクトルに等しいとおきます。
$2X^T (X\boldsymbol{\beta} - \boldsymbol{y}) = \boldsymbol{0}$
両辺を1/2倍しても式は変わらないので、
$X^T (X\boldsymbol{\beta} - \boldsymbol{y}) = \boldsymbol{0}$
行列の分配法則と転置の性質($(AB)^T = B^T A^T$)を使って展開します。
$X^T X \boldsymbol{\beta} - X^T \boldsymbol{y} = \boldsymbol{0}$
$X^T X \boldsymbol{\beta} = X^T \boldsymbol{y}$
この線形方程式は、最小二乗法において非常に重要な正規方程式と呼ばれます(正規方程式という用語はソースには直接記載されていませんが、ソースの公式 を用いて導出された結果です)。これは、未知のベクトル $\boldsymbol{\beta}$ に関する線形方程式系であり、線形代数の手法を用いて解くことができます。
4. 正規方程式の解法(線形代数による)
導出された正規方程式 $X^T X \boldsymbol{\beta} = X^T \boldsymbol{y}$ を解くことで、最小二乗解 $\hat{\boldsymbol{\beta}}$ を得ます。
$X^T X$ は $(p+1) \times (p+1)$ の正方行列です。もしこの行列 $X^T X$ が正則(逆行列を持つ)であれば、その逆行列 $(X^T X)^{-1}$ を正規方程式の左から掛けることで、解を解析的に求めることができます。
$(X^T X)^{-1} (X^T X \boldsymbol{\beta}) = (X^T X)^{-1} (X^T \boldsymbol{y})$
$((X^T X)^{-1} X^T X) \boldsymbol{\beta} = (X^T X)^{-1} X^T \boldsymbol{y}$
$I \boldsymbol{\beta} = (X^T X)^{-1} X^T \boldsymbol{y}$ (ここで $I$ は単位行列)
$\hat{\boldsymbol{\beta}} = (X^T X)^{-1} X^T \boldsymbol{y}$
これが、最小二乗法による回帰係数ベクトル $\boldsymbol{\beta}$ の推定値 $\hat{\boldsymbol{\beta}}$ を求める公式です。この解は、行列の積、転置、そして逆行列といった、純粋な線形代数の演算によって得られます。$(X^T X)^{-1} X^T$ の部分は、擬似逆行列と呼ばれる線形代数の概念に密接に関連しています(擬似逆行列という用語もソースには記載されていません)。
このように、重回帰モデルから出発し、二乗誤差を線形代数的な目的関数として定義し、ソース に示されているようなベクトル微分公式を用いてこの目的関数を微分し、勾配をゼロとおくことで得られる線形方程式系(正規方程式)を線形代数的に解く、というのが最小二乗法のアルゴリズムの核心部分です。ソース は、この過程で不可欠となるベクトルや行列の微分公式を提供しており、機械学習などの分野で広く応用される線形代数の強力なツールであることが示されています。
5. ベクトル微分の導出補足(2次元の例)
ソースでは、スカラー $f$ をベクトル $\boldsymbol{x} \in \mathbb{R}^n$ で微分する定義が次のように示されています。
$$\frac{ \partial f }{ \partial \boldsymbol{x} } = \left( \frac{ \partial f }{ \partial x_{1} }, \dots, \frac{ \partial f }{ \partial x_{n} } \right)^T \in \mathbb{R}^n$$
これは、スカラー関数をそのベクトルの各要素で偏微分した結果を縦に並べたベクトル(勾配ベクトル)であるという定義です。
この定義 に基づいて、ソース にある簡単な公式がどのように導出されるかを2次元の例で見てみます。$\boldsymbol{x} = \begin{pmatrix} x_1 \ x_2 \end{pmatrix}$ とします。
例1: $\frac{ \partial }{ \partial \boldsymbol{x} } \boldsymbol{x}^T\boldsymbol{x} = 2\boldsymbol{x}$ の導出イメージ
関数 $f(\boldsymbol{x}) = \boldsymbol{x}^T\boldsymbol{x}$ を考えます。これは、$\boldsymbol{x}^T\boldsymbol{x} = \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} \begin{pmatrix} x_1 \ x_2 \end{pmatrix} = x_1^2 + x_2^2$ というスカラー関数です。
ソース の定義に従い、この関数をベクトル $\boldsymbol{x}$ で微分します。これは、各要素 $x_1, x_2$ で偏微分した結果をベクトルとして並べるということです。
$\frac{\partial f}{\partial x_1} = \frac{\partial}{\partial x_1} (x_1^2 + x_2^2) = 2x_1$
$\frac{\partial f}{\partial x_2} = \frac{\partial}{\partial x_2} (x_1^2 + x_2^2) = 2x_2$
したがって、定義 によるベクトル微分は、これらの偏微分結果を縦に並べたベクトルになります。
$\frac{ \partial f }{ \partial \boldsymbol{x} } = \begin{pmatrix} \frac{\partial f}{\partial x_1} \ \frac{\partial f}{\partial x_2} \end{pmatrix} = \begin{pmatrix} 2x_1 \ 2x_2 \end{pmatrix} = 2 \begin{pmatrix} x_1 \ x_2 \end{pmatrix} = 2\boldsymbol{x}$
これはソース の公式と一致します。
例2: $\frac{ \partial }{ \partial \boldsymbol{x} } \left(\boldsymbol{x} - \boldsymbol{a} \right)^T \left(\boldsymbol{x} - \boldsymbol{a} \right) = 2\left(\boldsymbol{x} - \boldsymbol{a} \right)$ の導出イメージ
次に、関数 $g(\boldsymbol{x}) = (\boldsymbol{x} - \boldsymbol{a})^T (\boldsymbol{x} - \boldsymbol{a})$ を考えます。ここで $\boldsymbol{a} = \begin{pmatrix} a_1 \ a_2 \end{pmatrix}$ は定数ベクトルです。
$g(\boldsymbol{x}) = \begin{pmatrix} x_1 - a_1 & x_2 - a_2 \end{pmatrix} \begin{pmatrix} x_1 - a_1 \\ x_2 - a_2 \end{pmatrix} = (x_1 - a_1)^2 + (x_2 - a_2)^2$
同様に、各要素 $x_1, x_2$ で偏微分します。
$\frac{\partial g}{\partial x_1} = \frac{\partial}{\partial x_1} ((x_1 - a_1)^2 + (x_2 - a_2)^2) = 2(x_1 - a_1)$
$\frac{\partial g}{\partial x_2} = \frac{\partial}{\partial x_2} ((x_1 - a_1)^2 + (x_2 - a_2)^2) = 2(x_2 - a_2)$
定義 によるベクトル微分は、
$$\frac{ \partial g }{ \partial \boldsymbol{x} } = \begin{pmatrix} \frac{\partial g}{\partial x_1}\\ \frac{\partial g}{\partial x_2} \end{pmatrix} = \begin{pmatrix} 2(x_1 - a_1) \\ 2(x_2 - a_2) \end{pmatrix} = 2 \begin{pmatrix} x_1 - a_1 \\ x_2 - a_2 \end{pmatrix} = 2(\boldsymbol{x} - \boldsymbol{a})$$
これもソース の公式と一致します。
最小二乗法で用いる公式 $\frac{ \partial }{ \partial \boldsymbol{x} } \left(A\boldsymbol{x} - \boldsymbol{b} \right)^T \left(A\boldsymbol{x} - \boldsymbol{b} \right) = 2A^T \left( A \boldsymbol{x} -\boldsymbol{b} \right)$ は、これらの簡単な例と同様に、定義 に基づいて各要素で偏微分し、それをベクトルとしてまとめることで導出されますが、行列 $A$ が関わるため、連鎖律(チェーンルール)など、より複雑な線形代数的な微分の規則が必要となります。ソース はその結果公式を提供しており、最小二乗法の解析に直接適用できる形になっています。
このように、ベクトル微分は、多変数スカラー関数の勾配をベクトルとして表現する線形代数的な概念であり、その定義 に基づいて様々な公式 が導出されます。これらの公式は、最小二乗法のような最適化問題における勾配計算に不可欠なツールとなります。
以上が、重回帰分析モデルから始まり、最小二乗法の定式化、そしてソース に記載されているベクトル微分公式を用いた解の導出、さらにその背景にあるベクトル微分の概念を2次元で補足した説明となります。
では、重回帰分析における偏回帰係数を用いた簡単な問題を考えてみましょう。
問題設定
ある会社が製品の価格(Y)を予測したいと考えています。彼らは以下の2つの説明変数を使用することにしました:
- 広告費(X1): 製品の広告費(単位: 万円)
- 販売促進キャンペーンコスト(X2): 販売促進に使ったコスト(単位: 万円)
以下のデータが与えられています。
序号 | 広告費 (X1) | 販売促進 (X2) | 価格 (Y) |
---|---|---|---|
1 | 10 | 20 | 100 |
2 | 15 | 30 | 150 |
3 | 20 | 45 | 200 |
4 | 25 | 50 | 250 |
5 | 30 | 60 | 300 |
質問
- 上記のデータを基に、重回帰分析を行い、偏回帰係数を求めてください。
- 偏回帰係数を用いて、広告費が25万円、販売促進が40万円のときの価格の予測値を求めてください。
解法の手順
では、重回帰分析における各ステップを詳しく説明します。
1. 行列式の準備
目的変数ベクトル
価格($Y$)は、以下のようになります。
$$
\boldsymbol{Y} = \begin{pmatrix} 100 \\150 \\ 200 \\ 250 \\ 300 \end{pmatrix}
$$
説明変数行列
説明変数は広告費($X_1$)と販売促進キャンペーンコスト($X_2$)です。この行列には切片項を追加するための列を含めます。
$$
\mathbf{X} = \begin{pmatrix}
1 & 10 & 20 \\
1 & 15 & 30 \\
1 & 20 & 45 \\
1 & 25 & 50 \\
1 & 30 & 60
\end{pmatrix}
$$
ここで、最初の列は切片項のための「1」の列です。
係数ベクトル
係数ベクトルは、回帰係数を含むベクトルです。
$$
\boldsymbol{\beta} = \begin{pmatrix} \beta_0 \\ \beta_1 \\ \beta_2 \end{pmatrix}
$$
モデル設定
回帰モデルの形式は以下のようになります。
$$
\boldsymbol{Y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\epsilon}
$$
ここで、$\boldsymbol{\epsilon}$は誤差項です。
2. 偏回帰係数ベクトルの計算
偏回帰係数ベクトルは次のように計算されます。
$$
\boldsymbol{\beta} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \boldsymbol{Y}
$$
ステップごとの計算
-
転置行列の計算:
$$
\mathbf{X}^T = \begin{pmatrix}
1 & 1 & 1 & 1 & 1 \\
10 & 15 & 20 & 25 & 30 \\
20 & 30 & 45 & 50 & 60
\end{pmatrix}
$$ -
行列の積を計算:
$$
\mathbf{X}^T \mathbf{X} = \begin{pmatrix}
5 & 100 & 175 \\
100 & 2500 & 3750 \\
175 & 3750 & 4975
\end{pmatrix}
$$ -
逆行列を計算:
この行列の逆行列 $(\mathbf{X}^T \mathbf{X})^{-1}$ を計算します。 -
行列の積を計算:
$$
\mathbf{X}^T \boldsymbol{Y} = \begin{pmatrix}
1000 \\
18500 \\
25750
\end{pmatrix}
$$ -
最終的な係数ベクトル $\boldsymbol{\beta}$ の計算:
各ステップで得られた結果を利用し、偏回帰係数を求めます。
3. 予測値の計算
求めた係数を用いて価格を予測します。たとえば、広告費が25万円、販売促進が40万円のとき、新しいデータポイントに対する予測は以下のようになります。
-
新しいデータポイントの行列を作成します。切片項に対して1を持たせます。
$$
\mathbf{X}_{\text{new}} = \begin{pmatrix} 1 & 25 & 40 \end{pmatrix}
$$ -
価格の予測を計算します。
$$
\hat{Y} = \mathbf{X}_{\text{new}} \boldsymbol{\beta}
$$