- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-10-30T03:52:53+00:00","","")
#author("2019-10-30T07:16:57+00:00","","")
#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入門]]
-- [[R言語入門]]
-- [[統計学の基礎知識]]
#TODO
* 微分 [#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乗法 [#n2d4d535]
** 最小2乗法 (単回帰) [#s28b03a5]
#html(<div style="padding-left: 10px;">)
予測値と実際の値の差異が最小になるようにして線形モデルを導き出す方法。
線形モデル式を Y = 傾き * X + Y切片 とした場合。
※傾き:係数、Y切片:定数項
線形モデル式を Y = 傾き * X + Y切片 とした場合、傾き(係数) を w1、Y切片(定数項) を w0 で表現すると、
#html(){{
<div style="margin-bottom: 10px">
<math>
<mo>y = </mo>
<msub><mo>w</mo><mi>1</mi></msub>
<mo>x</mo>
<mo>+</mo>
<msub><mo>w</mo><mi>0</mi></msub>
</math>
<math>
<msub>
<mi> w</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> w</mo>
<mi>0</mi>
</msub>
<mo>=</mo>
<mo>y - </mo>
<msub>
<mi>w</mi>
<mi>1</mi>
</msub>
<mo>x</mo>
</math>
となる。(単回帰)
</div>
}}
#html(){{
<div style="padding-bottom: 10px;">
<math>
<mo>共分散(x,y)</mo>
<mo>=</mo>
<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>
</math>
<math>
<mo> 分散(x)</mo>
<mo>=</mo>
<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>
<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 = sum([(1 / n) * (x[i] - mean_x) * (y[i] - mean_y) for i in range(n)])
#xの分散
variance = sum([(1 / n) * (x[i] - mean_x) ** 2 for i in range(n)])
# w1、w0 を求める
w1 = covariance / variance
w0 = mean_y - (w1 * mean_x)
# np.polyfit を使えば1行で書ける
#w1, w0 = np.polyfit(x, y, 1)
# 回帰直線を求める
y_pred = w1*x + w0
# 描画
plt.scatter(x, y, color="red")
plt.plot(x, y_pred)
plt.grid(True)
plt.show()
}}
#html(</div>)
// パラメータ導出
// 最小二乗法と最尤推定について
#html(</div>)
** 勾配降下法(最急降下法) [#c0d3ebb9]
#html(<div style="padding-left: 10px;">)
値を何度も最適化しながら、誤差が最小となる値を求める方法。
※関数の最小値を探索する連続最適化問題の勾配法のアルゴリズムの一つ。( wikipedia より)
#html(</div>)
** 二乗平均平方根誤差 ( RMSE ) [#pa6dc0fa]
#html(<div style="padding-left: 10px;">)
回帰モデルの誤差を評価する指標の一つ。
#html(){{
<div style="padding-bottom: 10px;">
<math>
<mo>RMSE</mo>
<mo>=</mo>
<msqrt>
<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>
<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(){{
rmse = np.sqrt(sum([(y[i] - y_pred[i]) ** 2 for i in range(n)]) / n)
}}
#html(</div>)
** 最尤推定 [#k98022ba]
#html(<div style="padding-left: 10px;">)
#html(</div>)
#html(</div>)
* 確率と統計 [#d0e3df79]
#html(<div style="padding-left: 10px;">)
** 確率変数・確率分布 [#pc75af50]
#html(<div style="padding-left: 10px;">)
#html(</div>)
** 結合確率・条件付き確率 [#e2471822]
#html(<div style="padding-left: 10px;">)
#html(</div>)
** 期待値 [#c84a1cce]
#html(<div style="padding-left: 10px;">)
#html(</div>)
** 平均・分散・共分散 [#n261c0c8]
#html(<div style="padding-left: 10px;">)
#html(</div>)
** 相関係数 [#t9bc8825]
#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;">)
** ランダムフォレスト [#l984fed8]
決定木による複数の弱学習器を統合させて汎化能力を向上させる、アンサンブル学習アルゴリズムである。 おもに分類(判別)・回帰(予測)の用途で使用される
** サポートベクターマシン [#r02b5f3c]
サポートベクターマシン(英: support vector machine, SVM)は、教師あり学習を用いるパターン認識モデルの一つである。分類や回帰へ適用できる。
** ナイーブベイズ分類器 [#h61ab40e]
#TODO
** アダブースト [#b08c5429]
ランダムよりも少し精度がいいような弱い識別機を組みわせて、強い識別機を作成しようとする機械学習モデル
** k近傍法 [#w473aee6]
k近傍法(ケイきんぼうほう、英: k-nearest neighbor algorithm, k-NN)は、特徴空間における最も近い訓練例に基づいた分類の手法であり、パターン認識でよく使われる。
最近傍探索問題の一つ。k近傍法は、インスタンスに基づく学習の一種であり、怠惰学習 (lazy learning) の一種。
その関数は局所的な近似に過ぎず、全ての計算は分類時まで後回しにされる。また、回帰分析にも使われる。
k近傍法は、ほぼあらゆる機械学習アルゴリズムの中で最も単純。
** k平均法 [#c97e977b]
#TODO
** ニューラルネットワーク [#yef2af0b]
脳機能に見られるいくつかの特性に類似した数理的モデル
ニューラルネットワークはシナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般を指す
** マルコフ連鎖 [#v6d0db5a]
#TODO
#html(</div>)
* その他/用語など [#cbcd59c4]
#html(<div style="padding-left: 10px;">)
** 偏差 [#c3eaa1b1]
#html(<div style="padding-left: 10px;">)
値と平均値の差。
#html(</div>)
** Σ(シグマ) [#sbf832de]
#html(<div style="padding-left: 10px;">)
#html(</div>)
** マスク配列 [#b32fc7d9]
#html(<div style="padding-left: 10px;">)
#html(</div>)
** 行列とベクトル [#jc2b5322]
#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;">)
#html(</div>)
** ReLU関数 [#d167c797]
#html(<div style="padding-left: 10px;">)
#html(</div>)
#html(</div>)