回帰分析の正しい捉え方／最小二乗法

### 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つの説明変数を使用することにしました：

1. **広告費（X1）**: 製品の広告費（単位: 万円）
2. **販売促進キャンペーンコスト（X2）**: 販売促進に使ったコスト（単位: 万円）

以下のデータが与えられています。

| 序号 | 広告費 (X1) | 販売促進 (X2) | 価格 (Y) |
|------|--------------|----------------|---------|
| 1    | 10           | 20             | 100     |
| 2    | 15           | 30             | 150     |
| 3    | 20           | 45             | 200     |
| 4    | 25           | 50             | 250     |
| 5    | 30           | 60             | 300     |

### 質問

1. 上記のデータを基に、重回帰分析を行い、偏回帰係数を求めてください。
2. 偏回帰係数を用いて、広告費が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}
$$

### ステップごとの計算

1. **転置行列の計算**:
    $$
    \mathbf{X}^T = \begin{pmatrix}
    1 & 1 & 1 & 1 & 1 \\\\
    10 & 15 & 20 & 25 & 30 \\\\
    20 & 30 & 45 & 50 & 60
    \end{pmatrix}
    $$

2. **行列の積を計算**:
    $$
    \mathbf{X}^T \mathbf{X} = \begin{pmatrix}
    5 & 100 & 175 \\\\
    100 & 2500 & 3750 \\\\
    175 & 3750 & 4975
    \end{pmatrix}
    $$

3. **逆行列を計算**:
    この行列の逆行列 $(\mathbf{X}^T \mathbf{X})^{-1}$ を計算します。

4. **行列の積を計算**:
    $$
    \mathbf{X}^T \boldsymbol{Y} = \begin{pmatrix}
    1000 \\\\
    18500 \\\\
    25750
    \end{pmatrix}
    $$

5. **最終的な係数ベクトル $\boldsymbol{\beta}$ の計算**:
    各ステップで得られた結果を利用し、偏回帰係数を求めます。

## 3. 予測値の計算

求めた係数を用いて価格を予測します。たとえば、広告費が25万円、販売促進が40万円のとき、新しいデータポイントに対する予測は以下のようになります。

1. 新しいデータポイントの行列を作成します。切片項に対して1を持たせます。
    $$
    \mathbf{X}_{\text{new}} = \begin{pmatrix} 1 & 25 & 40 \end{pmatrix}
    $$

2. 価格の予測を計算します。
    $$
    \hat{Y} = \mathbf{X}_{\text{new}} \boldsymbol{\beta}
    $$