[[入門 機械学習による異常検知]] 3.1.3より
- データが単一の正規分布から生成されたと仮定したときに、ホテリング統計量が標本数が大きい場合には自由度$M$の[[カイ二乗分布]]に従う [[多変量のホテリングのT2法]]
- 実データの分布は正規分布でないことも多いため、自由度$M$のカイ二乗分布に基づく閾値は誤報を招く
- 任意のカイ二乗分布をもとに閾値を決める
- カイ二乗分布のパラメータmとsを、異常度列($a(x^{(1)}),...,a(x^{(n)}))$)から求める
- カイ二乗分布は[[ガンマ分布]]を線形変換したもの。
- 一般に$\mathcal{G}(m/2, 2s) = \chi^2(m,s)$が成立。
ガンマ分布の[[モーメント法]]による推定量から次の式が導ける。($\langle x \rangle$は$x$の1次の[[モーメント]])
$
\hat{m}_{mo} = \frac{2\langle a\rangle^2}{\langle a^2\rangle - \langle a\rangle^2}
$
$
\hat{s}_{mo} = \frac{\langle a^2 \rangle - \langle a^2 \rangle}{2 \langle a \rangle^2}
$
$
\langle a \rangle = \frac{1}{N}\sum_{n=1}^{N}a^{(n)}
$
$
\langle a^2 \rangle = \frac{1}{N}\sum_{n=1}^{N}a^{(n)^2}
$
- カイ二乗分布の自由度$\hat{m}_{mo}$は多くの場合Mよりかなり小さくなる。
- 見かけ上のMは大きくても活動的な次元はさほど多くない
- $\hat{m}_{mo}$は系の有効次元
```python
# モーメントの計算
mean, sig2 = np.mean(scores), np.mean(np.sum([a**2 for a in scores]))
m = 2 * (mean**2) / (sig2 - mean**2)
s = (sig2 - mean**2) / 2*mean
```