E試験 2024#2 シラバスメモ①数学的基礎

E試験のシラバスとその概要をメモしたものです。
各サイトや生成AIに聞いたもののツギハギです。

シラバスは2024#2に準拠しています

https://www.jdla.org/certificate/engineer/

本記事は数学的基礎編のものです。

## 線形代数
2024#2では試験範囲外になっています

## 確率・統計

### ベイズ則

ある事象が起こった後にある事象が起こる確率を計算できる
Bが起こった時のAの確立
```math
P(A|B) = \frac{P(A∩B)}{P(B)}
```
乗法定理P(A∩B)=P(B|A)・P(A)
```math
P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
```
ここで、各項の意味は次の通りです：

- P(A|B): Bが与えられた条件下でのAの確率（事後確率）
- P(B|A): Aが与えられた条件下でのBの確率（尤度）
- P(A): Aの事前確率
- P(B): Bの事前確率

#### 例題

出典：https://bellcurve.jp/statistics/course/7873.html

### ナイーブベイズ(単純ベイズ)

ナイーブベイズ分類器は、ベイズの定理を基にした機械学習の分類アルゴリズムです。教師あり学習に分類されます。

文書分類やスパムフィルタなどの問題に広く利用されます。例えば、文書が与えられた場合、各単語の出現頻度を特徴量とし、その文書がどのカテゴリに属するかを確率的に推定します。

#### ナイーブベイズの仮定

ナイーブベイズ分類器では、特徴量間の条件付き独立性を仮定します。つまり、各特徴量が互いに独立であると仮定します。

スパムフィルタの例で言うと、メールに「無料」が含まれていることがわかったからといって、「割引」が含まれている確率には影響を与えないと仮定します。

#### 数学的表現

ナイーブベイズ分類器における事後確率の計算式は次のように表されます。

```math
P(C_k | x_1, x_2, \ldots, x_n) = \frac{P(C_k) \prod_{i=1}^{n} P(x_i | C_k)}{P(x_1, x_2, \ldots, x_n)}
```

ここで、
- $C_k$：分類したいクラス(カテゴリ)　例えばそのメールがスパムかスパムでないか
- $x_1...x_n$：分類に使われる要素。例えばメール中に含まれる単語
- $ P(C_k | x_1, x_2, \ldots, x_n)$ : 単語x_nが含まれる(含まれない)ときのスパムであるかどうかの確率
- $ P(C_k): クラスC_k$ の事前確率(全サンプルのうちスパムの個数)
- $ P(x_i | C_k)$ : クラスC_kにおいてx_iが観測される確率（特徴x_iの条件付き確率）

### コスト関数・損失関数・Loss

予測値（あるいは推定値）と実際の値（真の値）の間の差を評価するための関数

### 平均二乗誤差（Mean Squared Error, MSE）

平均二乗誤差（MSE）は、予測値（あるいは推定値）と実際の値（真の値）の間の差の二乗の平均を表す指標です。

主に回帰問題に使用される

#### 用途

MSEの主な用途は以下の通りです：

- **モデルの評価**: 機械学習モデルが予測する値と実際の観測値との誤差を数値化して評価します。
- **誤差最小化**: 学習アルゴリズムにおいて、MSEを最小化するようにモデルパラメータを調整することで、最適なモデルを選択または構築します。

#### 数式

平均二乗誤差（MSE）は以下の数式で表されます：

```math
MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
```

ここで、
- $ n $: データ点の数
- $ y_i $: 実際の観測値（真の値）
- $ \hat{y}_i $: モデルが予測する値（推定値）

#### 具体的な例

例として、以下のようなデータがあるとします：

- 真の値（観測値）: $ y = [3, 5, 7, 9] $
- モデルの予測値（推定値）: $ \hat{y} = [2.5, 5.1, 6.8, 8.9] $

これを用いてMSEを計算すると、

```math
MSE = \frac{1}{4} [(3 - 2.5)^2 + (5 - 5.1)^2 + (7 - 6.8)^2 + (9 - 8.9)^2]
    = \frac{1}{4} [0.25 + 0.01 + 0.04 + 0.01]
    = \frac{0.31}{4}
    = 0.0775
```

このように、実際の値と予測値の間の誤差を二乗し、その平均をとった値がMSEです。
MSEが小さいほど、予測の精度が高いと言えます。

### 尤度・対数尤度・最尤推定

#### 尤度

尤度とはある確率分布のモデルに対して事象がどれだけ尤もらしいかを数値化したもの。
例えば、
- モデル
サイコロを振って6が出る確率 p=1/6
6以外が出る確率 1-p=5/6
- 事象
12回中4回6が出て、8回は6以外が出る
- この尤もらしさ(尤度)
$ L(p) = {}_{12} C_4 * (1/6)^4 * (5/6)^8 ≒0.0888 $

⇒1/6が正しいと仮定した場合、尤度(4回6が出る可能性)は0.089くらいだよ

これがイカサマサイコロで6が出る確率が2/6だとした場合は$ L = {}_{12} C_4 * (2/6)^4 * (4/6)^8 = 0.24 $ くらいでこちらの方が尤度が高いよ
という使い方

確率が「ある確率分布に対して、ある事象になる、可能性」とするなら
尤度は「ある事象に対して、ある確率分布である、可能性の尤もらしさ」

この時「12回中6が4回出たという事象」に対して6が出る確率が1/6より、2/6の方が尤もらしい。

#### 最尤推定(MLE:Maximum Likelihood Estimate)

ほかの確率を計算してみても2/6時が最も高くなる=最も尤もらしくなる
(直感的に言っても12回中4回出たというので1/3になりそう)

この2/6という最大の尤度を導出するのが最尤推定となる。

対数尤度は尤度関数の対数をとったもの。対数をとることによって計算をしやすくするために利用。

今回の例で順を追うと
- 12回サイコロを振って6が4回でるという事象に対しての尤度関数
$ p:=6が出る確率 $
$L(p) = {}_{12} C_4 * p^4 * p^8$
- 対数尤度
$l(p) = log(L(p)) = log(C(12,4)) + 4log(p) + 8log(1-p)$

尤度関数は確率の積の為、非常に小さい値になったりで計算上困ることもあるので
対数をとっても大小の関係は変わらないことを利用し計算上扱いやすくしたのが対数尤度。

対数尤度関数は上に凸であるため
最大となるpを求めるには傾きが0になる時のpを求める。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/2864428f-9159-035c-111a-c451fdf47204.png" width=50%>

すなわち$\frac{d}{dp}l(p)=0$となるpを求めればよい。
$\frac{d}{dp}l(p)=\frac{4}{p} - \frac{8}{1-p}=0$
これを解いて$p=\frac{1}{3}$

##### 最尤推定まとめ

$ f(y_i | \theta) $: データ点 $ y_i $ がパラメータ $ \theta $ のもとで従う確率密度関数（または確率質量関数）としたとき。
尤度関数
```math
L(\theta|y) = \prod_{i}f(y_i|\theta)
```

対数尤度（Log-Likelihood）はその対数をとり以下の数式で表される：

```math
l(\theta | y) = \log L(\theta | y) = \sum_{i=1}^{n} \log f(y_i | \theta)
```

この時、以下を満たす$ \theta $を導くのが最尤推定
```math
\frac{\delta}{\delta\theta}l(\theta)=0
```

対数尤度は値が大きいほど尤もらしいと評価されるので
機械学習で使用する際には負の符号をつけ最小化問題として扱うことが多い。

#### MAP(Maximum A Posteriori)推定とベイズ推定

最尤推定(MLE)だと事象に尤度が引っ張られてしまい、サンプル数が少ないときにうまく機能しない。
例えば2回サイコロを振って2回6がでたとき、このサイコロは100% 6が出るのが尤もらしいということになってしまう。

MAP推定はMLEに事前確率の考え方を入れた推定

**事前確率の設定：**
サイコロが1/6の確率で6が出ると仮定する。(事前確率$\text{Prior}(p)$)

ここでは、事前分布として $ \mathrm{Beta}(\alpha=7, \beta=31) $ と仮定します。
(Modeが1/6になるような分布。α-1/α+β-2=(7-1)/(7+31-2)=1/6)

確率密度関数の展開
$f(p; α, β) = (1 / B(α, β)) * p^{α-1} * (1-p)^{β-1}$
定数項を省略しα=6,β=31の時$p^6 \cdot (1-p)^{30}$

1. **事後確率の計算**:

   ベイズの定理により、事後確率 $ P(p \mid \text{data}) $ は次のようになります：
   $ P(p \mid \text{data}) \propto L(p \mid \text{data}) \cdot \text{Prior}(p) $
   $ \propto (p^4 \cdot (1-p)^8) \cdot (p^6 \cdot (1-p)^{30}) $
   $ \propto p^{10} \cdot (1-p)^{38} $

   事前分布との積を計算し、事後分布 \( \mathrm{Beta}(7 + 4, 31 + 8) \) から事後確率を求めます。

2. **MAP推定量の計算**:

   事後確率を最大化する \( p \) を求めます。
   対数尤度の微分
   $ 10/p - 38/(1-p) = 0 $となるpを解くと
   $ p_{\text{MAP}} = 10 / (10 + 38) \approx 0.2083 $

   つまり、MAP推定によれば、事前知識を考慮した結果、サイコロが6を出す確率 \( p \) は約0.2083と推定されます。

#### ベイズ推定

MAP推定だと3回サイコロを回して2回6が出たサイコロと300回中200回6を出したサイコロの確率は一緒になってしまう。
確率に対する範囲というか信頼性も加味したのがベイズ推定

ここの解説の方がわかりやすい
https://qiita.com/jyori112/items/80b21422b15753a1c5a4

#### 比較

|特性|MLE (最尤推定)|MAP推定|ベイズ推定|
|--|--|--|--|
|基本的アプローチ|データのみに基づく|データと事前知識を組み合わせる|データと事前知識を組み合わせる|
|出力形式|単一の点推定値|単一の点推定値|事後分布全体(確率毎の信頼性)|
|少ない試行回数での振る舞い|極端な推定をする可能性が高い|比較的安定した推定値を提供|安定した推定値と高い不確実性を示す|
|事前知識の影響|考慮しない|強い事前知識に引っ張られる|事後分布全体に影響|
|不確実性の表現|提供しない|提供しない（失われる）|明示的に表現（信頼区間など）|
|計算の複雑さ|比較的簡単|中程度|複雑になる可能性がある|
|サイコロ例での推定値|p = 4/12 ≈ 0.3333|p ≈ 0.2083|E[p] = 0.22, 95%CI:[0.1161, 0.3435]|
|推定値の解釈|6が出る最も可能性の高い確率|6が出る最も可能性の高い確率|6が出る確率の期待値と可能な範囲|
|追加情報の統合|困難|新しい事前分布が必要|自然に事後分布を更新可能|
|適している状況|大量のデータがある場合|単一の推定値が必要な場合|不確実性の評価が重要な場合|

### 自己情報量、相互情報量、エントロピー

####  自己情報量（Self-Information）
自己情報量は、ある出来事がどれくらい「驚き」かを表します。日常生活での例えで言うと、天気予報が「明日は雨が降る」と言っていたのに、実際に降らなかった場合、それは「予想外」で驚きが大きいですよね。この「驚き」の量が自己情報量に当たります。

もっと簡単に言えば、起こりにくい出来事ほど自己情報量は大きくなります。逆に、よく起こる出来事（たとえば、「太陽が明日も昇る」）の驚きは少ないので、自己情報量は小さいです。

確率 $ P(x) $ で表される出来事 $ x $ の自己情報量 $ I(x) $ は、次の式で計算されます：

$$
I(x) = - \log P(x)
$$

- $ P(x) $ は出来事 $ x $ が発生する確率です。
- 例えば、$ P(x) $ が低いほど驚きは大きくなるため、自己情報量も大きくなります。

####  相互情報量（Mutual Information）
相互情報量は、二つの出来事がどれくらい「お互いに関連しているか」を表すものです。例えば、空が曇っていることと雨が降ることは関係しています。この二つの出来事が関連している度合いを測るのが相互情報量です。

もう少し例を出すと、鍵を持っていないとドアを開けられないとき、「鍵を持っている」情報が「ドアが開く」出来事に強く影響します。つまり、鍵とドアの関連性が高いわけです。

相互情報量 $ I(X; Y) $ は次の式で表されます：

$$
I(X; Y) = \sum_{x \in X} \sum_{y \in Y} P(x, y) \log_2 \left( \frac{P(x, y)}{P(x) P(y)} \right)
$$

- $ P(x, y) $ は $ X = x $ かつ $ Y = y $ である同時確率です。
- $ P(x) $ および $ P(y) $ はそれぞれ $ X $ および $ Y $ の周辺確率です。
- この式は、$ X $ と $ Y $ がどれだけお互いに情報を持っているかを測定しています。値が大きいほど、お互いに依存している度合いが高いことを意味します。

####  エントロピー（Entropy）
エントロピーは、「情報の不確実性の量」を表す指標です。日常生活でいうと、エントロピーが高いときは予測が難しい状態です。例えば、サイコロを振った結果がどうなるかを予測するのは難しいので、サイコロの結果のエントロピーは高いと言えます。

逆に、エントロピーが低い場合、結果がかなり予測可能です。たとえば、毎朝太陽が昇ることは確実なので、これに関するエントロピーは低いです。

ある確率変数 $ X $ のエントロピー $ H(X) $ は、次の式で計算されます：

$$
H(X) = - \sum_{x \in X} P(x) \log P(x)
$$

- $ P(x) $ は確率変数 $ X $ が値 $ x $ を取る確率です。
- この式は、全ての可能な結果に対してその不確実性を合計したものです。エントロピーが高いほど、その変数の未来の状態を予測するのが難しくなります。

####  条件付きエントロピー（Conditional Entropy）
条件付きエントロピーは、ある情報が既に分かっている場合に、別の情報にどれだけ不確実性が残っているかを測ります。例えば、「空が曇っている」という条件のもとで「雨が降るかどうか」の不確実性を測ることができます。

$$
H(Y|X) = - \sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(y|x)
$$
- $ P(y|x) $ は条件付き確率で、$ X = x $ のもとで $ Y = y $ が起こる確率です。

####  結合エントロピー（Joint Entropy）
結合エントロピーは、二つの変数の不確実性を合わせたものです。つまり、二つの変数がどれだけの不確実性を持っているかを同時に測ります。

$$
H(X, Y) = - \sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x, y)
$$
- $ P(x, y) $ は $ X $ と $ Y $ が同時に起こる確率です。

####  クロスエントロピー（Cross-Entropy）
クロスエントロピーは、ある「予測モデル」と「現実」の間の違いを測る方法です。日常の例で言えば、あなたが天気を予測するモデルを持っていて、それが実際の天気とどれだけ違うかを測るのがクロスエントロピーの役割です。

天気予報が正確であればあるほど、クロスエントロピーは小さくなり、逆に誤差が大きければクロスエントロピーは大きくなります。
実際の分布を $ P $ とし、予測された分布を $ Q $ とすると、クロスエントロピー $ H(P, Q) $ は次の式で表されます：

$$
H(P, Q) = - \sum_{x \in X} P(x) \log Q(x)
$$

- $ P(x) $ は実際の確率です。
- $ Q(x) $ は予測された確率です。
- 予測された分布が実際の分布とどれだけ異なるかを測る指標であり、クロスエントロピーが小さいほど、予測の精度が高いことを示します。

---

まとめとして、それぞれの式は以下のように解釈できます：

- **自己情報量**：出来事がどれくらい「驚き」かを数値化します。不確実な出来事ほど驚きは大きくなり、自己情報量も増えます。
- **相互情報量**：二つの出来事がどれだけお互いに関連しているかを数値化します。関連性が強いほど相互情報量は大きくなります。
- **エントロピー**：ある変数の不確実性（予測の難しさ）を数値化します。エントロピーが高いほど、その変数の未来の状態を予測するのが難しいです。
- **条件付きエントロピー**：ある条件が既に分かっている場合の別の情報の不確実性を数値化します。
- **結合エントロピー**：二つの変数の不確実性を合わせた全体の不確実性を数値化します。
- **クロスエントロピー**：予測モデルと実際の現実との誤差を数値化します。誤差が大きいほどクロスエントロピーも大きくなります。

### ダイバージェンス

ダイバージェンスは、確率分布や情報量の異なる二つの集合間の距離や差を示す指標です。二つの分布がどれだけ異なるかを数値化することで、分布間の類似性や差異を評価する際に使用されます。

ダイバージェンスが小さいほど、二つの分布は似ており、大きいほど異なると言えます。
ゼロで完全一致

#### 用途

ダイバージェンスの主な用途は以下の通りです：

- **確率分布の比較**: 異なる確率分布間の類似性を評価し、最適なモデルの選択や統計的推定の際に使用します
- **情報理論**: 情報量の理論において、情報量の量的な比較や情報の損失を評価するために重要な概念です

#### 数式

ダイバージェンスの一般的な数式は以下のように表されます。ここで、$ P(x) $ と $ Q(x) $ は比較する二つの確率分布です。

```math
D(P \parallel Q)
```

具体的なダイバージェンスの種類に応じて、異なる数式や定義が存在します。代表的なダイバージェンスとしては、以下のようなものがあります：

#### KLダイバージェンス（Kullback-Leibler Divergence, KLダイバージェンス

二つの確率分布 $ P $ と $ Q $ の間の情報量の差を測る指標です。
クロスエントロピーから情報エントロピーを引いた形です。
$ D_{KL}(P \parallel Q)=H(P,Q)−H(P)$
※H(P,Q):クロスエントロピー、H(P):情報エントロピー

期待値の形で表すと
  ```math
  D_{KL}(P \parallel Q) = \sum_{x} P(x) \log \left( \frac{P(x)}{Q(x)} \right)
  ```

#### JSダイバージェンス（Jensen-Shannon Divergence, JSダイバージェンス）

二つの確率分布 $ P $ と $ Q $ の間の平均情報量の差を測る指標です。以下の数式で表されます：

  ```math
  D_{JS}(P \parallel Q) = \frac{1}{2} D_{KL}(P \parallel M) + \frac{1}{2} D_{KL}(Q \parallel M)
  ```

  ここで、$ M = \frac{1}{2} (P + Q) $ は $ P $ と $ Q $ の平均分布です。