#author("2019-07-02T11:16:44+00:00","","")
#mynavi()
#mynavi(機械学習関連)
#setlinebreak(on)

#contents
#html(<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>)

# AAA
* 目次 [#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>&sum;</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>&sum;</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>&sum;</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>&sum;</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>&sum;</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>&sum;</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>&sum;</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>)
// その他


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS