- 追加された行はこの色です。
- 削除された行はこの色です。
- 統計学の基礎知識 へ行く。
#mynavi()
#mynavi(機械学習関連)
#setlinebreak(on)
#html(<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>)
* 目次 [#gbdcb128]
#contents()
- 関連
-- [[機械学習の為の数学の基礎]]
-- [[numpy入門]]
-- [[pandas入門]]
- 参考
-- [[統計Web>https://bellcurve.jp/statistics/]]
* 平均値 [#h483edc5]
#html(<div style="padding-left: 10px;">)
#html(){{
数式では μ(ミュー) や <math><mover><mo>x</mo><mo>-</mo></mover></math> として表される。
}}
#html(){{
<div style="padding-left: 10px;">
<math>
<mo>μ</mo>
<mo>=</mo>
<mrow>
<mfrac>
<mi>1</mi>
<mo>n</mo>
</mfrac>
</mrow>
<munderover>
<mi>∑</mi>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<msub>
<mo>x</mo>
<mi>1</mi>
</msub>
</math>
</div>
}}
#mycode2(python){{
import numpy as np
x = np.array([1,2,3,4,5])
print(x.mean()) # 3.0
}}
#html(</div>)
//** トリム平均 [#d316d1d2]
//外れ値を除いた平均
* 中央値 [#d619971c]
#html(<div style="padding-left: 10px;">)
データを小さい順に並べたとき中央に位置する値。
#mycode2(python){{
import numpy as np
x = np.array([1,2,3,4,5])
np.median(x)
}}
結果
#myterm2(){{
3.0
}}
#html(</div>)
* 最頻値 [#yf66f31a]
#html(<div style="padding-left: 10px;">)
最も頻繁に出現する値。
#mycode2(python){{
import numpy as np
import scipy.stats as stats
x = np.array([1,2,3,1,2,3,5,6,3,5,6,7,4,1,3,4])
stats.mode(x, axis=-1).mode[0]
}}
結果
#myterm2(){{
3
}}
#html(</div>)
* 四分位範囲(IQR) [#bc1ef84e]
#html(<div style="padding-left: 10px;">)
散らばりの程度を表す尺度の一つ。
四分位範囲(IQR) = 75パーセンタイル(第三四分位数) - 25パーセンタイル(第一四分位数)
#mycode2(python){{
data = np.array([2,69,67,75,84,92,80,77,65,78,84,95,71])
# 四分位点を求める
q25, q75 = np.percentile(data, [25 ,75])
# 四分位範囲
iqr = q75 - q25
print(q25, q75 )
print(iqr)
}}
** 外れ値について [#d31cf194]
#html(<div style="padding-left: 10px;">)
外れ値の定義は扱われるデータによって変わるが、一般的には、値 < (Q1 - 1.5 * IQR) または 値 > (Q3 + 1.5 * IQR) を外れ値として扱う。
例1) 上記のデータから外れ値を除外する例
#mycode2(python){{
print(data[(data >= q25 - 1.5 * iqr) & (data <= q75 + 1.5 * iqr)])
}}
結果
#myterm2(){{
[69 67 75 84 92 80 77 65 78 84 95 71] # 2 が除外されている
}}
例2) 平均 ±Nσ の範囲外を外れ値として扱う場合
※ 平均 ± 標準偏差 * N
#mycode2(python){{
# 平均 ±2σ を外れ値として扱う場合
N = 2
s_plus = data.mean() + (N * data.std())
s_minus = data.mean() - (N * data.std())
print(data[(data >= s_minus) & (data <= s_plus)])
}}
結果
#myterm2(){{
[69 67 75 84 92 80 77 65 78 84 95 71] # 2 が除外されている
}}
#html(</div>)
#html(</div>)
* 分散 [#v82fd7a5]
#html(<div style="padding-left: 10px;">)
データのばらつきを表す値。( variance )
#html(<div style="display: inline-block; vertical-align: top;">)
1. 各データと平均値の差を求める
2. 1で求めた値を2乗する
3. 2で求めた値をすべて足す
4. 3で求めた値をデータ数で割る
#html(</div>)
#html(<div style="display: inline-block; vertical-align: top; padding: 30px;"> → </div>)
#html(<div style="display: inline-block; vertical-align: top; padding: 20px;">)
#html(){{
<math>
<msup><mo>s</mo><mi>2</mi></msup>
<mo>=</mo>
</math>
<math>
<mrow>
<mfrac>
<mi>1</mi>
<mo>n</mo>
</mfrac>
</mrow>
<munderover>
<mi>∑</mi>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<mrow>
<msup>
<mrow>
<mo>(</mo>
<msub>
<mi>x</mi>
<mi>i</mi>
</msub>
<mo>-</mo>
<mover>
<mi>x</mi>
<mo>-</mo>
</mover>
<mo>)</mo>
</mrow>
<mi>2</mi>
</msup>
</mrow>
</math>
}}
#html(</div>)
例)
#mycode2(python){{
import numpy as np
x = [1,2,3,4,5]
np.sum((x - np.mean(x)) ** 2) / len(x) # 2.0
}}
#html(</div>)
* 正規分布 [#i4d610f6]
#html(<div style="padding-left: 10px;">)
#html(){{
平均を μ, 分散を <math><msup><mo>σ</mo><mi>2</mi></msup></math> > 0 とする(1次元)正規分布は、以下の式で表される。
}}
#html(){{
<div>
<math>
<mo>f(x)</mo>
<mo>=</mo>
<mfrac>
<mi>1</mi>
<msqrt><mo>2π</mo></msqrt>
</mfrac>
<mo>exp</mo>
<mo>(</mo>
<mo>-</mo>
<mfrac>
<msup><mrow><mo>(</mo><mo>x</mo><mo>-</mo><mo>μ</mo><mo>)</mo><mrow><mi>2</mi></msup>
<mrow><mi>2</mi><msup><mo>σ</mo><mi>2</mi></msup></mrow>
</mfrac>
<mo>)</mo>
</math>
</div>
}}
#html(</div>)
* 標準正規分布 [#q6857bde]
#html(<div style="padding-left: 10px;">)
平均が0、分散が1の正規分布のこと。
#html(){{
<math>
<mo>f(x)</mo>
<mo>=</mo>
<mfrac>
<mi>1</mi>
<msqrt><mo>2π</mo></msqrt>
</mfrac>
<mo>exp</mo>
<mo>(</mo>
<mo>-</mo>
<mfrac>
<msup><mo>x</mo><mi>2</mi></msup>
<mi>2</mi>
</mfrac>
<mo>)</mo>
</math>
}}
#html(</div>)
* 標準偏差 [#nb151669]
#html(<div style="padding-left: 10px;">)
標準偏差を求めるには、分散の平方根(ルート)をとる。
#html(){{
<div>
<math>
<mo>σ</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mfrac>
<mi>1</mi>
<mo>n</mo>
</mfrac>
</mrow>
<munderover>
<mi>∑</mi>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<mrow>
<msup>
<mrow>
<mo>(</mo>
<msub>
<mi>x</mi>
<mi>i</mi>
</msub>
<mo>-</mo>
<mover>
<mi>x</mi>
<mo>-</mo>
</mover>
<mo>)</mo>
</mrow>
<mi>2</mi>
</msup>
</mrow>
</msqrt>
</math>
</div>
}}
#mycode2(python){{
import numpy as np
x = [1,2,3,4,5]
np.std(x)
# 1.4142135623730951
np.sqrt(np.sum((x - np.mean(x)) ** 2) / len(x))
# 1.4142135623730951
}}
** 不偏分散と標本標準偏差 [#o9973d89]
#html(<div style="padding-left: 10px;">)
不偏分散の平方根をとる事で標本標準偏差を求める事ができる。
※不偏分散は、標本分散から母分散を推測するための分散で全標本数-1で割る。
#html(){{
<math>
<mo>標本標準偏差</mo>
<mo>=</mo>
<msqrt>
<mfrac>
<mo>1</mo>
<mo>(n - 1)</mo>
</mfrac>
<munderover>
<mi>∑</mi>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<mrow>
<msup>
<mrow>
<mo>(</mo>
<mo>x</mo>
<mo>-</mo>
<mover>
<mo>x</mo>
<mo>-</mo>
</mover>
<mo>)</mo>
</mrow>
<mi>2</mi>
</msup>
</mrow>
</msqrt>
</math>
}}
#mycode2(python){{
data = np.array([...])
np.sqrt(np.sum((data - m) ** 2) / (len(data) - 1))
}}
#html(</div>)
** 偏差値の求め方 [#hbfb6d02]
#html(<div style="padding-left: 10px;">)
偏差値は、元のデータを平均が50、標準偏差が10となるように変換した値。
#html(){{
<math>
<mo>偏差値</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mo>x</mo>
<mo>-</mo>
<mover>
<mo>x</mo>
<mo>-</mo>
</mover>
</mrow>
<mo>s</mo>
</mfrac>
<mo>*</mo>
<mi>10</mi>
<mo>+</mo>
<mi>50</mi>
</math>
}}
※ s: 標準偏差
#mycode2(python){{
score = np.array([82, 95, 74, 65, 77, 88])
# 標準偏差
s = np.sqrt(((score - score.mean()) ** 2).sum() / (len(score)))
# 偏差値
print((score - score.mean()) / s * 10 + 50)
}}
結果
#myterm2(){{
[51.89289775 65.31526361 43.6329803 34.34057317 46.73044934 58.08783584]
}}
#html(</div>)
#html(</div>)
* Z得点(z値、z-score、z-value) [#ha83d6c4]
#html(<div style="padding-left: 10px;">)
平均が0、標準偏差(SD)が1になるように変換した得点。
※平均から標準偏差何個ぶん離れているか。
※ z = (データ - 平均) / 標準偏差
#html(){{
<math>
<mo>z</mo>
<mo>=</mo>
<mfrac>
<mo>x - μ</mo>
<mo>σ</mo>
</mfrac>
</math>
}}
#html(</div>)
* 相関係数 [#xc2ec0e9]
#html(<div style="padding-left: 10px;">)
相関係数は相関関係の強弱を数値化したもの。
※相関係数は -1 <= r <= 1 の値を持ち、1 (または -1) に近いほど相関関係が強い。
#html(){{
<math>
<mo>r</mo>
<mo>=</mo>
<mfrac>
<msub>
<mo>x と y の共分散</mo>
</msub>
<mrow>
<mo>xの標準偏差</mo>
<mo>・</mo>
<mo>yの標準偏差</mo>
</mrow>
</mfrac>
<mo>=</mo>
<mfrac>
<msub>
<mo>S</mo><mo>xy</mo>
</msub>
<mrow>
<msub>
<mo>S</mo><mo>x</mo>
</msub>
<msub>
<mo>S</mo><mo>y</mo>
</msub>
</mrow>
</mfrac>
<mo>=</mo>
<mfrac>
<mrow>
<mfrac><mi>1</mi><mo>n</mo></mfrac>
<munderover><mi>∑</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover>
<mrow><mo>(</mo> <msub><mi>x</mi><mi>i</mi></msub> <mo>-</mo> <mover><mi>x</mi><mo>-</mo></mover> <mo>)</mo></mrow>
<mrow><mo>(</mo> <msub><mi>y</mi><mi>i</mi></msub> <mo>-</mo> <mover><mi>y</mi><mo>-</mo></mover> <mo>)</mo></mrow>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow><mfrac><mi>1</mi><mo>n</mo></mfrac></mrow>
<munderover><mi>∑</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover>
<mrow><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>-</mo><mover><mi>x</mi><mo>-</mo></mover><mo>)</mo></mrow><mi>2</mi></msup></mrow></mrow>
</msqrt>
<msqrt>
<mrow><mfrac><mi>1</mi><mo>n</mo></mfrac></mrow>
<munderover><mi>∑</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover>
<mrow><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>i</mi></msub><mo>-</mo><mover><mi>y</mi><mo>-</mo></mover><mo>)</mo></mrow><mi>2</mi></msup></mrow></mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</math>
}}
#mycode2(python){{
x = np.array([82, 95, 74, 65, 77, 88])
y = np.array([2, 3, 1.5, 0.5, 1, 1.5])
n = x.size
x_mean = x.mean()
y_mean = y.mean()
x_std = x.std()
y_std = y.std()
# x と y の共分散を求める
cov = np.sum([(x - x_mean) * (y - y_mean)]) / n
# cov = np.cov(x, y, ddof=0)[0][1] # 共分散は np.cov でも求める事ができる
# 相関係数を求める
r = cov / (x_std * y_std)
print(r)
print(np.corrcoef(x, y)) # 相関係数は np.corrcoef でも求める事ができる
}}
結果
#myterm2(){{
0.8737254372984308
[[1. 0.87372544]
[0.87372544 1. ]]
}}
** 非線形の相関 [#sf2638c0]
#html(<div class="pl10">)
上記のピアソンの相関係数で数値化できるデータは線形の相関に限られる。
例えば、以下のように明らかに関係性があるデータでもピアソンの相関係数では正しい相関度を表す事ができない。
#html(<div style="display: inline-block; padding-top: 20px;">)
#mycode2(){{
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 10, 200)
y = x**2
plt.plot(x, y, marker="o")
plt.show()
}}
#html(</div><div style="display: inline-block; vertical-align: top;">)
#ref(correlation_curve.png,nolink)
#html(</div>)
ピアソンの相関係数
#mycode2(){{
print('{:0.20f}'.format(np.corrcoef(x, y)[0,1]))
}}
結果
#myterm2(){{
0.00000000000000019357
}}
MIC( Maximal information coefficient )を使用すると、このような非線形の相関も表す事ができる。
#mycode2(){{
from minepy import MINE
mine = MINE()
mine.compute_score(x, y)
print('{:0.20f}'.format(mine.mic()))
}}
結果
#myterm2(){{
0.99999999999999888978
}}
#html(</div>)
#html(</div>)
* 標準化係数 [#rabe09ac]
#html(<div style="padding-left: 10px;">)
(データ - 平均) / 標準偏差
※標準偏差何個分離れているか (平均を1とする)
※正規分布の場合、±1 以内は全体の 68% に含まれる。( [[正規分布の「68-95-99.7ルール」>#kcffce6a]] )
#html(</div>)
* 帰無仮説 [#pe5351bd]
#html(<div style="padding-left: 10px;">)
統計的仮説検定の際にとりあえず立てる仮説の事。
#html(){{
<math><msup><mo>H</mo><mi>0</mi></msup></math> として表される。
}}
#html(</div>)
* P値 [#n9dbf60c]
#html(<div style="padding-left: 10px;">)
帰無仮説の下でデータから計算された統計量よりも極端な(仮説に反する)統計量が観測される確率をP値という
一般的にP値が5%または1%以下の場合に帰無仮説を偽として棄却し、対立仮説を採択する。
#html(</div>)
* 有意水準 [#i8cc1bb0]
#html(<div style="padding-left: 10px;">)
#html(){{
どの程度の正確さをもって帰無仮説 <math><msup><mo>H</mo><mi>0</mi></msup></math> を棄却するかを表す定数。<br />
有意水準αの仮説検定は、p < α の時に <math><msup><mo>H</mo><mi>0</mi></msup></math> を棄却する
}}
#html(</div>)
* 検出力 [#x0752a31]
#html(<div style="padding-left: 10px;">)
統計的仮説検定で、帰無仮説が偽であるときに検定が帰無仮説を棄却する確率の事。
#html(</div>)
* t検定 [#vf10a21a]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)
* 加重平均 [#db3031bc]
#html(<div style="padding-left: 10px;">)
異なる母数を持つ複数の平均の平均を求める
#html(</div>)
* 平均 ±Nσ [#e5547bf0]
#html(<div style="padding-left: 10px;">)
平均 ± 標準偏差 * N (範囲外は外れ値として扱う。等)
#html(</div>)
* 効果量 [#he47c768]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)
* その他 [#p6afe4da]
#html(<div style="padding-left: 10px;">)
** 正規分布の「68-95-99.7ルール」 [#kcffce6a]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)
** 標準正規分布表(Zテーブル)を使用した分布率の算出 [#gb7ced3a]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)
#html(</div>)
// その他