#author("2019-01-18T02:31:11+00:00","","")
* 機械学習の為の数学の基礎 [#g470303d]
#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>)


* 目次 [#zec6bbe3]
#contents
-- 関連
--- [[PyTorch入門]]
--- [[TensorFlow入門]]
- 関連
-- [[pandas入門]]
-- [[numpy入門]]
-- [[matplotlibでグラフ作成]]
-- [[PyTorch入門]]
-- [[TensorFlow入門]]
-- [[R言語入門]]
-- [[統計学の基礎知識]]
-- [[numpyを使用した重回帰分析]]
- 参考
-- https://tutorials.chainer.org/ja/03_Basic_Math_for_Machine_Learning.html#%E7%9B%AE%E7%9A%84%E9%96%A2%E6%95%B0

* 微分 [#m6b109c1]
#html(<div style="padding-left: 10px;">)

** 常備分 [#me111516]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** 偏微分 [#l5ac6af5]
#html(<div style="padding-left: 10px;">)
#html(</div>)

#html(</div>)

* 線形回帰 ( Linear regression ) [#r9dd04b0]
#html(<div style="padding-left: 10px;">)
// http://gihyo.jp/dev/serial/01/machine-learning/0008

//** 線形代数 [#k5522922]
//#html(<div style="padding-left: 10px;">)
//#TODO
//#html(</div>)

** 最小2乗法(LSM) (単回帰) [#s28b03a5]
#html(<div style="padding-left: 10px;">)
予測値と実際の値の差異が最小になるようにして線形モデルを導き出す方法。

線形モデル式を Y = 傾き * X + Y切片 とした場合、傾き(係数) を θ1、Y切片(定数項) を θ0 で表現すると、

#html(){{
<div style="margin-bottom: 10px">
<math>
  <mo>y = </mo>
  <msub><mo>θ</mo><mi>1</mi></msub>
  <mo>x</mo>
  <mo>+</mo>
  <msub><mo>θ</mo><mi>0</mi></msub>
</math>

<math>
  <msub>
    <mi> θ</mi>
    <mi>1</mi>
  </msub>
  <mo>=</mo>
  <mfrac>
    <mo>共分散(x,y)</mo>
    <msup>
      <mo>分散(x)</mo>
      <mi>2</mi>
    </msup>
  </mfrac>
</math>

<math>
  <msub>
    <mo> θ</mo>
    <mi>0</mi>
  </msub>
  <mo>=</mo>
  <mo>y - </mo>
  <msub>
    <mi>θ</mi>
    <mi>1</mi>
  </msub>
  <mo>x</mo>
</math>

 となる。(単回帰)
</div>
}}

#html(){{
<div style="padding-bottom: 10px;">
<math>
    <mo>共分散(x,y) : </mo>
    <msub>
      <mo>S</mo>
      <mi>xy</mi>
    </msub>
    <mo>=</mo>
    <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>
</math>

<math>
    <mo> 分散(x) : </mo>
    <msup>
      <mo>S</mo>
      <mi>2</mi>
    </msup>
    <mo>=</mo>
    <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>
    <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>
</math>

なので、以下のコードで 回帰直線を求める事が出来る。
</div>
}}

#mycode2(){{
import numpy as np
import matplotlib
import pandas as pd

data = pd.read_csv('./data/sample.csv')
x = data['X']
y = data['Y']

n = len(x)                        # データの個数
mean_x = np.mean(x)  # xの平均値
mean_y = np.mean(y)  # yの平均値

#xとyの共分散
covariance = (1 / n) * sum([(x[i] - mean_x) * (y[i] - mean_y) for i in range(n)])

#xの分散
variance = (1 / n) * sum([(x[i] - mean_x) ** 2 for i in range(n)])

# θ1、θ0 を求める
t1 = covariance / variance
t0 = mean_y - (t1 * mean_x)

# np.polyfit を使えば1行で書ける
#t1, t0 = np.polyfit(x, y, 1)  # 第3引数は次数

# 回帰直線を求める
y_pred = t1*x + t0

# 描画
plt.scatter(x, y, color="red")
plt.plot(x, y_pred)
plt.grid(True)
plt.show()
}}

#html(</div>)


** 勾配降下法(最急降下法) [#c0d3ebb9]
#html(<div style="padding-left: 10px;">)

学習回数と学習率を指定して、何度も計算(最適化)を行って誤差が最小となる値を求める方法。
※関数の最小値を探索する連続最適化問題の勾配法のアルゴリズムの一つ。( wikipedia より)

#html(){{
<div>
<math>
    <msub><mo>θ</mo><mo>0</mo></msub>
    <mo>:=</mo>
    <msub><mo>θ</mo><mo>0</mo></msub>
    <mo>-</mo>
    <mo>α</mo>
    <mfrac><mo>∂</mo><msub><mo>∂θ</mo><mi>1</mi></msub></mfrac>
    <mo>J</mo><mo>(</mo><msub><mo>θ</mo><mi>0</mi></msub><mo>,</mo><msub><mo>θ</mo><mi>1</mi></msub><mo>)</mo>
</math>
</div>

<div>
<math>
    <msub><mo>θ</mo><mo>1</mo></msub>
    <mo>:=</mo>
    <msub><mo>θ</mo><mo>1</mo></msub>
    <mo>-</mo>
    <mo>α</mo>
    <mfrac><mo>∂</mo><msub><mo>∂θ</mo><mi>1</mi></msub></mfrac>
    <mo>J</mo><mo>(</mo><msub><mo>θ</mo><mi>0</mi></msub><mo>,</mo><msub><mo>θ</mo><mi>1</mi></msub><mo>)</mo>
</math>
</div>
}}


#html(){{
偏微分を計算すると
<div>
<math>
    <msub>
      <mo>θ</mo>
      <mo>0</mo>
    </msub>
    <mo>:=</mo>
    <msub>
      <mo>θ</mo>
      <mo>0</mo>
    </msub>
    <mo>-</mo>

    <mo>α</mo>
    <mfrac><mi>1</mi><mo>m</mo></mfrac>

    <munderover>
        <mi>&sum;</mi>
        <mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow>
        <mi>m</mi>
    </munderover>
    <mrow>
      <mo>(</mo><mover><mi>y</mi><mo>^</mo></mover>  <mo>-</mo>  <msub><mi>y</mi><mi>i</mi></msub><mo>)</mo>
    </mrow>
</math>
</div>

<div>
<math>
    <msub>
      <mo>θ</mo>
      <mo>1</mo>
    </msub>
    <mo>:=</mo>
    <msub>
      <mo>θ</mo>
      <mo>1</mo>
    </msub>
    <mo>-</mo>

    <mo>α</mo>
    <mfrac><mi>1</mi><mo>m</mo></mfrac>

    <munderover>
        <mi>&sum;</mi>
        <mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow>
        <mi>m</mi>
    </munderover>
    <mrow>
      <mo>(</mo><mover><mi>y</mi><mo>^</mo></mover>  <mo>-</mo>  <msub><mi>y</mi><mi>i</mi></msub><mo>)</mo> <mo>・</mo>  <msub><mi>x</mi><mi>i</mi></msub>
    </mrow>
</math>
</div>
}}

上記の数式を python で実装してみる。
※以下では計算(最適化)毎のコスト算出用に目的関数も定義している。
※ここでは、θ0,θ1 の 初期値は 0 とした。
#mycode2(){{
def cost_func(x, y, t0, t1):
    """目的関数."""
    m = x.size
    # return (np.sqrt(sum([(y[j] - (t1 * x[j] + t0)) ** 2 for j in range(m)]) / m))  # RMSEの場合
    return 1 / (2*m) * sum([((t1 * x[i] + t0) -  y[i]) ** 2 for i in range(m)])


def gradient_descent(x, y, alpha, iter_num):
    """最急降下法."""
    m = len(x)
    t0 = 0.0
    t1 = 0.0
    costs = np.zeros(iter_num)

    for i in range(iter_num):

        # θ0, θ1 の計算 及び 更新
        h = t0 + t1 * x
        t0 = t0 - alpha * np.sum(h - y) / m
        t1 = t1 - alpha * np.sum((h - y) * x) / m

        costs[i] = cost_func(x, y, t0, t1)
        #costs[i] = np.sqrt(sum([(y[j] - (t1 * x[j] + t0)) ** 2 for j in range(m)]) / m)

    return (t0, t1, costs)
}}

上記で作成した関数を用いて回帰直線 及び 最適化毎のコスト(誤差)をプロットしてみる。

#mycode2(){{
# パラメータ設定
alpha = 0.01         # 学習率
iter_num = 100   # 学習回数

# サンプルデータ
x1 = np.array(range(1, 10), dtype=np.float64)
y1 = np.array([x1[i] + random.randrange(0, 3) for i in range(len(x1))], dtype=np.float64)

# 最急降下法
t0, t1, costs = gradient_descent(x1, y1, alpha, iter_num)

fig = plt.figure(figsize=(10, 5))

# データのプロット
ax1 = fig.add_subplot(1, 2, 1)
ax1.set_xlabel('data x')
ax1.set_ylabel('data y')
ax1.scatter(x1, y1, c='r')           # 散布図(実際の値)
ax1.grid(True)
ax1.plot(x1, x1 * t1 + t0, '-')     # 回帰直線

# コスト遷移状況をプロット
ax2 = fig.add_subplot(1, 2, 2)
ax2.set_xlabel('iterations')
ax2.set_ylabel('cost')
ax2.plot(range(costs.size), costs, "-b", linewidth=2 )
ax2.grid(True)

plt.show()

# t1(係数)とt0(定数項)を確認
print(f"t0: {t0}, t1: {t1}")
print("cost(最終): {}".format(costs[len(costs)-1]))
}}

結果
#ref(gradient_descent_sample1.png)

#html(</div>)

** 重回帰分析 [#m59a0296]
#html(<div style="padding-left: 10px;">)

重回帰モデル式(特徴量 x が2つの時)
#html(){{
<div>
<math>
  <mover><mo>y</mo><mo>^</mo></mover>
  <mo>=</mo>
  <msub><mo>w</mo><mi>1</mi></msub>
  <msub><mo>x</mo><mi>1</mi></msub>
  <mo>+</mo>
  <msub><mo>w</mo><mi>2</mi></msub>
  <msub><mo>x</mo><mi>2</mi></msub>
  <mo>+</mo>
  <msub><mo>w</mo><mi>0</mi></msub>
  <msub><mo>x</mo><mi>0</mi></msub>
</math>

 ※行列計算用に
<math>
  <msub><mo>x</mo><mi>0</mi></msub>
  <mo>=</mo>
  <mi>1</mi>
</math>
とする
</div>
}}

特徴量の行列をX、パラメータの行列をWとした場合、
#html(){{
<div>
<math>
  <mover><mo>y</mo><mo>^</mo></mover>
  <mo>=</mo>
  <mo>X</mo>
  <mo>*</mo>
  <mo>W</mo>
</math>
</div>
}}

#html(){{
<div>
<math>
  <mo>W</mo>
  <mo>:=</mo>
  <mo>W</mo>
  <mo>-</mo>
  <mo>α</mo>
  <mfrac><mo>1</mo><mo>m</mo></mfrac>
  <msup><mo>X</mo><mo>T</mo></msup>
  <mo>(</mo><mo>XW</mo><mo>-</mo><mo>y</mo><mo>)</mo>
</math>
</div>
}}

#html(){{
コスト関数は
<div>
<math>
    <mrow>
    <mo>j</mo><mo>(</mo><mo>W</mo><mo>)</mo>
    <mo>=</mo>
    </mrow>
    <mfrac><mi>1</mi><mo>2m</mo></mfrac>
    <munderover><mi>&sum;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></munderover>
    <msup><mrow><mo>(</mo>  <mover><mi>y</mi><mo>^</mo></mover>  <mo>-</mo>  <msub><mi>y</mi><mi>i</mi></msub>  <mo>)</mo> </mrow><mi>2</mi></msup>
    <mo>=</mo>
    <mfrac><mi>1</mi><mo>2m</mo></mfrac>
    <msup>
      <mrow><mo>(</mo><mo>XW</mo><mo>-</mo><mo>y</mo><mo>)</mo></mrow>
      <mo>T</mo>
    </msup>
    <mrow><mo>(</mo><mo>XW</mo><mo>-</mo><mo>y</mo><mo>)</mo></mrow>
</math>
</div>
}}

※ 関連: [[numpyを使用した重回帰分析]]

#html(</div>)
// 重回帰分析

//** 最尤推定 [#k98022ba]
//#html(<div style="padding-left: 10px;">)
//#html(</div>)

// パラメータ導出
// 最小二乗法と最尤推定について

#html(</div>)
// 回帰分析 END

* 正規化 [#s6c52410]
#html(<div style="padding-left: 10px;">)
分析を行う際、特徴量の範囲が異なる時は特徴量のスケールを調整する(正規化)事で、収束までのコストを抑える事ができる。

** z-socre Normalization (標準化) [#j3f49df1]
#html(<div style="padding-left: 10px;">)
平均が0、標準偏差が1となるように調整する。
#html(){{
<div style="padding-bottom: 10px;">
<math>
  <msub><mo>x</mo><mi>1</mi></msub>
  <mo>=</mo>
  <mfrac>
    <mrow><msub><mo>x</mo><mi>1</mi></msub><mo>-</mo><msub><mo>x</mo><mi>mean</mi></msub></mrow>
    <mo>std</mo>
  </mfrac>
</math>
</div>
}}
※ std: 標準偏差
#html(</div>)
// z-socre Normalization

** min-max normalization [#o4c1e2e1]
#html(<div style="padding-left: 10px;">)
最大値が1最小値が0となるように調整する。

#html(){{
<div>
<math>
  <msub><mo>x</mo><mi>1</mi></msub>
  <mo>=</mo>
  <mfrac>
    <mrow><msub><mo>x</mo><mi>1</mi></msub><mo>-</mo><msub><mo>x</mo><mi>mean</mi></msub></mrow>
    <mrow><msub><mo>x</mo><mi>max</mi></msub><mo>-</mo><msub><mo>x</mo><mi>min</mi></msub></mrow>
  </mfrac>
</math>
</div>
}}

#html(</div>)
// min-max normalization

#html(</div>)
// 正規化

* 目的関数 / 評価指標 など[#i5907b87]
#html(<div style="padding-left: 10px;">)

予測値を評価する為の指標は、目的関数により定義される。
※予測と実績の誤差(コスト)を評価する為の関数。

** 平均二乗誤差(MSE) / 二乗平均平方根誤差 ( RMSE ) [#pa6dc0fa]
#html(<div style="padding-left: 10px;">)

回帰モデルの誤差を評価する指標の一つ。
https://tutorials.chainer.org/ja/03_Basic_Math_for_Machine_Learning.html#%E7%9B%AE%E7%9A%84%E9%96%A2%E6%95%B0


#html(){{
<div style="padding-bottom: 10px;">
<math>
  <mo>目標値</mo><mo>=</mo><msub><mi>y</mi><mi>i</mi></msub>
</math>
<math>
  <mo>予測値</mo><mo>=</mo><mover><msub><mi>y</mi><mi>i</mi></msub><mo>^</mo></mover>
</math>
とした場合。
}}

&br;

#html(){{
平均二乗誤差(MSE)
<div style="padding: 10px;">
<math>
    <mo>L</mo>
    <mo>=</mo>
    <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>
      <msup>
        <mrow>
              <mo>(</mo>  <msub><mi>y</mi><mi>i</mi></msub>  <mo>-</mo>  <mover><msub><mi>y</mi><mi>i</mi></msub><mo>^</mo></mover>  <mo>)</mo>
        </mrow>
        <mi>2</mi>
      </msup>
    </mrow>
</math>
</div>
}}

#html(){{
二乗平均平方根誤差(RMSE)
<div style="padding: 10px;">
<math>
    <mo>RMSE</mo>
    <mo>=</mo>
    <msqrt>
      <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>
      <msup>
        <mrow>
              <mo>(</mo>  <msub><mi>y</mi><mi>i</mi></msub>  <mo>-</mo>  <mover><msub><mi>y</mi><mi>i</mi></msub><mo>^</mo></mover>  <mo>)</mo>
        </mrow>
        <mi>2</mi>
      </msup>
    </msqrt>
</math>
</div>
}}

回帰直線(予測値)を y_pred とした場合、以下で求める事ができる。
#mycode2(){{
# MSE
mse = np.sum([(y[i] - y_pred[i]) ** 2 for i in range(len(y))]) / len(y)  # 遅い
mse = np.power(y - y_pred, 2).sum() / len(y)  # 速い

# RMSE
rmse = np.sqrt(mse)
}}

#html(</div>)


** 交差エントロピー [#rc25d246]
#html(<div style="padding-left: 10px;">)

分類モデルの誤差を評価する指標の一つ。

#html(</div>)


** コスト関数 [#ybacd0ad]
#html(<div style="padding-left: 10px;">)

#html(){{
単回帰
<div>
<math>
    <mrow>
    <mo>j</mo>
    <mo>(</mo>
    <msub>
      <mo>θ</mo>
      <mo>0</mo>
    </msub>
    <mo>,</mo>
    <msub>
      <mo>θ</mo>
      <mo>1</mo>
    </msub>
    <mo>)</mo>
    <mo>=</mo>
    </mrow>
    <mfrac><mi>1</mi><mo>2m</mo></mfrac>
    <munderover>
        <mi>&sum;</mi>
        <mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow>
        <mi>m</mi>
    </munderover>
    <msup>
        <mrow>
          <mo>(</mo>  <mover><mi>y</mi><mo>^</mo></mover>  <mo>-</mo>  <msub><mi>y</mi><mi>i</mi></msub>  <mo>)</mo> 
        </mrow>
        <mi>2</mi>
    </msup>
</math>
</div>
}}

#html(){{
重回帰
<div>
<math>
    <mrow>
    <mo>j</mo><mo>(</mo><mo>W</mo><mo>)</mo>
    <mo>=</mo>
    </mrow>
    <mfrac><mi>1</mi><mo>2m</mo></mfrac>
    <munderover><mi>&sum;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></munderover>
    <msup><mrow><mo>(</mo>  <mover><mi>y</mi><mo>^</mo></mover>  <mo>-</mo>  <msub><mi>y</mi><mi>i</mi></msub>  <mo>)</mo> </mrow><mi>2</mi></msup>
    <mo>=</mo>
    <mfrac><mi>1</mi><mo>2m</mo></mfrac>
    <msup>
      <mrow><mo>(</mo><mo>XW</mo><mo>-</mo><mo>y</mo><mo>)</mo></mrow>
      <mo>T</mo>
    </msup>
    <mrow><mo>(</mo><mo>XW</mo><mo>-</mo><mo>y</mo><mo>)</mo></mrow>
</math>
 ※ 特徴量の行列をX、パラメータの行列をWとした場合
</div>
}}

#html(</div>)

** 正解率 [#ud8fdd63]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** 適合率 [#wdec2f10]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** 再現率 [#n84ec8f5]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** F1 Score [#yf07acbd]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** ROC曲線とAUC [#z1d44279]
#html(<div style="padding-left: 10px;">)
#html(</div>)

#html(</div>)
// 目的関数 / 評価指標など


* 頻度分析 [#i535681c]
#html(<div style="padding-left: 10px;">)

** 観測頻度と相対頻度 [#z1c313ad]

** 標準化頻度 [#eda634f5]
※観測頻度 - 平均値 / 標準偏差

** TF-IDF [#dcb2e767]
各テキストの特徴的な単語を抽出する為の技法
TF(単語の観測度) * IDF(その単語が出現するテキストの数でテキストの総数を割った値の対数)

#html(</div>)


* 数理モデル [#y3a84c10]
#html(<div style="padding-left: 10px;">)

** ロジスティック回帰 [#ve056dc5]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)

** 線形代数 [#k5522922]
*** ベクトル [#ud78c4aa]
** 決定木 [#kd955514]
#html(<div style="padding-left: 10px;">)
ある事項に対する観察結果から、その事項の目標値に関する結論を導く手法。
#html(</div>)

** 微分 [#m6b109c1]
** ランダムフォレスト [#l984fed8]
#html(<div style="padding-left: 10px;">)
複数の決定木モデルを構築して、それらを一つにまとめてより正確で質の高い予測を行う手法。おもに分類(判別)・回帰(予測)の用途で使用される。
#html(</div>)

*** 常備分 [#me111516]
** サポートベクターマシン [#r02b5f3c]
#html(<div style="padding-left: 10px;">)
サポートベクターマシン(SVM)は、教師あり学習を用いるパターン認識モデルの一つである。分類や回帰へ適用できる。
- 分類を行うSVM:「サポートベクタークラシファイヤー(Support Vector Classifier)」
- 回帰を行うSVM: 「サポートベクターレグレッション(Support Vector Regression)」

*** 偏微分 [#l5ac6af5]
*** SVMのハイパーパラメータ [#tf37bcc2]
| パラメータ | 説明 |h
| C (Cパラメータ)  分類ミスをどのくらい許容するか設定する値 | Cパラメータが低い状態を「ソフトマージン」、高い状態を「ハードマージン」と呼ぶ |
| decision_function_shape(多項分類) | OVR: 1つの分類クラスと「他の全ての分類クラス」でハイパープレインを導き出す。&br; OVO: 各クラスと「別の1クラス毎」にハイパープレインを導き出す。|
| kernel(カーネル) | データに新たな次元を追加してハイパープレインを導き出す仕組み。&br; よく使用されるカーネル関数に 線形、多項式、放射基底関数、シグモイド関数 などがある。|
| gamma(ガンマ) | モデルが訓練データへどれくらいフィットさせるかを調整する値。&br; ガンマの値が小さいと分類はシンプルなものになり、高いと複雑な分類を行われる。|

** 行列 [#ue573e0e]
#html(</div>)

** ナイーブベイズ (単純ベイズ分類器) [#h61ab40e]
#html(<div style="padding-left: 10px;">)
#TODO
確率的なアプローチを利用して分類を行う機械学習の手法。

「ベイズの定理(Bayes' theorem)」と呼ばれる、条件付き確率の定理が基となっている。
#html(</div>)

** アダブースト [#b08c5429]
#html(<div style="padding-left: 10px;">)
ランダムよりも少し精度がいいような弱い識別機を組みわせて、強い識別機を作成しようとする機械学習モデル
#html(</div>)

**  k近傍法 [#w473aee6]
#html(<div style="padding-left: 10px;">)
k近傍法(ケイきんぼうほう、英: k-nearest neighbor algorithm, k-NN)は、特徴空間における最も近い訓練例に基づいた分類の手法であり、パターン認識でよく使われる。
最近傍探索問題の一つ。k近傍法は、インスタンスに基づく学習の一種であり、怠惰学習 (lazy learning) の一種。
その関数は局所的な近似に過ぎず、全ての計算は分類時まで後回しにされる。また、回帰分析にも使われる。
k近傍法は、ほぼあらゆる機械学習アルゴリズムの中で最も単純。
#html(</div>)

** k平均法 [#c97e977b]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)

** ニューラルネットワーク [#yef2af0b]
#html(<div style="padding-left: 10px;">)
脳機能に見られるいくつかの特性に類似した数理的モデル
ニューラルネットワークはシナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般を指す
#html(</div>)

** マルコフ連鎖 [#v6d0db5a]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)

#html(</div>)


* その他/用語など [#cbcd59c4]
#html(<div style="padding-left: 10px;">)

** 偏差 [#c3eaa1b1]
#html(<div style="padding-left: 10px;">)
値と平均値の差。
#html(</div>)

** マスク配列 [#b32fc7d9]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** 正則化 [#c8f48358]
#html(<div style="padding-left: 10px;">)
※過学習の回避
#html(</div>)

** ドロップアウト法 [#j65ed75d]
#html(<div style="padding-left: 10px;">)
※過学習の回避
#html(</div>)

** 順伝播 [#r3902506]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** 損失関数 [#fcb884f7]
#html(<div style="padding-left: 10px;">)
#html(</div>)

**誤差逆伝播法 [#s64adb92]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** 指数関数と対数関数 [#nacecf0f]
#html(<div style="padding-left: 10px;">)
#html(</div>)

** シグモイド関数 [#qf4dcfb5]
#html(<div style="padding-left: 10px;">)

** ReLU関数 [#d167c797]
シグモイド関数は値を0&#12316;1のレンジにコンパクトにする計算を行う。
※ 線形回帰のモデル式を圧縮して0&#12316;1の確率となるような値を出力する。

** 確率・統計 [#ac52a877]
#html(){{
<math>
  <mfrac>
    <mrow>
      <msup>
        <mo>e</mo>
        <mrow><mo>(</mo><msub><mo>w</mo><mi>1</mi></msub><mo>x</mo><mo>+</mo><msub><mo>w</mo><mi>0</mi></msub><mo>)</mo>
      </msup>
    </mrow>
    <mrow>
      <mo>1</mo>
      <mo>+</mo>
      <msup>
        <mo>e</mo>
        <mrow><mo>(</mo><msub><mo>w</mo><mi>1</mi></msub><mo>x</mo><mo>+</mo><msub><mo>w</mo><mi>0</mi></msub><mo>)</mo>
      </msup>
    </mrow>
  </mfrac>
</math>

*** 確率変数・確率分布 [#pc75af50]
  もしくは  

*** 結合確率・条件付き確率 [#e2471822]
<math>
  <mfrac>
    <mi>1</mi>
    <mrow>
      <mo>1</mo>
      <mo>+</mo>
      <msup>
        <mo>e</mo>
        <mrow><mo>-(</mo><msub><mo>w</mo><mi>1</mi></msub><mo>x</mo><mo>+</mo><msub><mo>w</mo><mi>0</mi></msub><mo>)</mo>
      </msup>
    </mrow>
  </mfrac>
</math>
}}

*** 期待値 [#c84a1cce]
#html(</div>)

*** 平均・分散・共分散 [#n261c0c8]
** ReLU関数 ( 正規化線形関数 ) [#d167c797]
#html(<div style="padding-left: 10px;">)
#html(</div>)

*** 相関係数 [#t9bc8825]
** 混同行列 [#h58f9a42]
#html(<div style="padding-left: 10px;">)
#html(</div>)

*** 最後 [#r96d20a1]
** 条件付き確率 [#cf207b96]
#html(<div style="padding-left: 10px;">)

** その他 [#cbcd59c4]
#html(){{
<math>
  <mo>P(A|B)</mo>
  <mo>=</mo>
  <mfrac>
    <mo>P(A∩B)</mo>
    <mo>P(B)</mo>
  </mfrac>
</math>
}}

*** ニューラルネットワーク [#ae0076cc]
#html(</div>)

*** 線形回帰モデル [#m11eb1c4]
** ベイズの定理 [#tfca1c50]
#html(<div style="padding-left: 10px;">)

*** 最小2乗法 [#n2d4d535]
※パラメータ導出
#html(){{
<math>
  <mo>P(A|B)</mo>
  <mo>=</mo>
  <mfrac>
    <mrow><mo>P(B|A)</mo><mo>P(A)</mo></mrow>
    <mo>P(B)</mo>
  </mfrac>
</math>
}}

*** 正則化 [#c8f48358]
※過学習の回避
#html(</div>)

*** ドロップアウト法 [#j65ed75d]
※過学習の回避
** グリッドサーチ [#w071687d]
#html(<div style="padding-left: 10px;">)
様々なパラメーターの値の組み合わせでモデルを何度も構築し、最適なパラメータの値を算出する手法。
#html(</div>)

*** 順伝播 [#r3902506]
** アンサンブル学習 [#me1290ac]
#html(<div style="padding-left: 10px;">)
複数のモデルを融合させて1つの学習モデルを生成する手法。
大きくバギングとブースティングの2つの手法に分けられる。

*** 損失関数 [#fcb884f7]
#html(</div>)

*** 最尤推定法 [#v28556e3]
** 説明変数 [#c25ef9ad]
#html(<div style="padding-left: 10px;">)
学習で使用する入力データ。(教師データ、特徴量)
#html(</div>)

*** 勾配降下法 [#q949f8d9]
** 目的変数 [#m11bc950]
#html(<div style="padding-left: 10px;">)
教師あり学習で使用する実結果データ。( 従属変数や被説明変数 )
#html(</div>)

***誤差逆伝播法 [#s64adb92]
** 乗法公式 [#sd341db5]
#html(<div style="padding-left: 10px;">)

#html(){{

<div>
<math>
  <mo>(x+a)(x+b)</mo>
  <mo>=</mo>
  <msup><mo>x</mo><mo>2</mo></msup>
  <mo>+</mo>
  <mo>(a+b)x</mo>
  <mo>+</mo>
  <mo>ab</mo>
</math>
</div>

<div>
<math>
  <mo>(a+b)(a-b)</mo>
  <mo>=</mo>
  <msup><mo>a</mo><mo>2</mo></msup>
  <mo>-</mo>
  <msup><mo>b</mo><mo>2</mo></msup>
</math>
</div>

<div>
<math>
  <msup><mo>(a+b)</mo><mo>2</mo></msup>
  <mo>=</mo>
  <msup><mo>a</mo><mo>2</mo></msup>
  <mo>+</mo>
  <mo>2ab</mo>
  <mo>+</mo>
  <msup><mo>b</mo><mo>2</mo></msup>
</math>
</div>

<div>
<math>
  <msup><mo>(a-b)</mo><mo>2</mo></msup>
  <mo>=</mo>
  <msup><mo>a</mo><mo>2</mo></msup>
  <mo>-</mo>
  <mo>2ab</mo>
  <mo>+</mo>
  <msup><mo>b</mo><mo>2</mo></msup>
</math>
</div>

<div>
<math>
  <mo>(ax+b)(cx+d)</mo>
  <mo>=</mo>
  <mo>ac</mo>
  <msup><mo>x</mo><mo>2</mo></msup>
  <mo>+</mo>
  <mo>(ad+bc)x</mo>
  <mo>+</mo>
  <mo>bd</mo>
</math>
</div>
}}



#html(</div>)

#html(</div>)


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