目次

微分

常備分

偏微分

線形回帰 ( Linear regression )

最小2乗法(LSM) (単回帰)

予測値と実際の値の差異が最小になるようにして線形モデルを導き出す方法。

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

y = θ1 x + θ0  θ 1 = 共分散(x,y) 分散(x) 2  θ 0 = y - θ 1 x  となる。(単回帰)
共分散(x,y) : S xy = 1n i=1 n ( xi - x- ) ( yi - y- )  分散(x) : S 2 = 1n i=1 n ( xi - x- ) 2 なので、以下のコードで 回帰直線を求める事が出来る。
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()

勾配降下法(最急降下法)

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

θ0 := θ0 - α ∂θ1 J(θ0,θ1)
θ1 := θ1 - α ∂θ1 J(θ0,θ1)
偏微分を計算すると
θ 0 := θ 0 - α 1m i=1 m (y^ - yi)
θ 1 := θ 1 - α 1m i=1 m (y^ - yi) xi

上記の数式を python で実装してみる。
※以下では計算(最適化)毎のコスト算出用に目的関数も定義している。
※ここでは、θ0,θ1 の 初期値は 0 とした。

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)

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

# パラメータ設定
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]))

結果

gradient_descent_sample1.png

重回帰分析

重回帰モデル式(特徴量 x が2つの時)

y^ = w1 x1 + w2 x2 + w0 x0  ※行列計算用に x0 = 1 とする

特徴量の行列をX、パラメータの行列をWとした場合、

y^ = X * W
W := W - α 1m XT (XW-y)
コスト関数は
j(W) = 12m i=1m ( y^ - yi ) 2 = 12m (XW-y) T (XW-y)

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

正規化

分析を行う際、特徴量の範囲が異なる時は特徴量のスケールを調整する(正規化)事で、収束までのコストを抑える事ができる。

z-socre Normalization (標準化)

平均が0、標準偏差が1となるように調整する。

x1 = x1-xmean std

※ std: 標準偏差

min-max normalization

最大値が1最小値が0となるように調整する。

x1 = x1-xmean xmax-xmin

目的関数 / 評価指標 など

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

平均二乗誤差(MSE) / 二乗平均平方根誤差 ( RMSE )

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

目標値=yi 予測値=yi^ とした場合。


平均二乗誤差(MSE)
L = 1n i=1 n ( yi - yi^ ) 2
二乗平均平方根誤差(RMSE)
RMSE = 1n i=1 n ( yi - yi^ ) 2

回帰直線(予測値)を y_pred とした場合、以下で求める事ができる。

# 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)

交差エントロピー

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

コスト関数

単回帰
j ( θ 0 , θ 1 ) = 12m i=1 m ( y^ - yi ) 2
重回帰
j(W) = 12m i=1m ( y^ - yi ) 2 = 12m (XW-y) T (XW-y)  ※ 特徴量の行列をX、パラメータの行列をWとした場合

正解率

適合率

再現率

F1 Score

ROC曲線とAUC

頻度分析

観測頻度と相対頻度

標準化頻度

※観測頻度 - 平均値 / 標準偏差

TF-IDF

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

数理モデル

ロジスティック回帰

TODO:

決定木

ある事項に対する観察結果から、その事項の目標値に関する結論を導く手法。

ランダムフォレスト

複数の決定木モデルを構築して、それらを一つにまとめてより正確で質の高い予測を行う手法。おもに分類(判別)・回帰(予測)の用途で使用される。

サポートベクターマシン

サポートベクターマシン(SVM)は、教師あり学習を用いるパターン認識モデルの一つである。分類や回帰へ適用できる。

  • 分類を行うSVM:「サポートベクタークラシファイヤー(Support Vector Classifier)」
  • 回帰を行うSVM: 「サポートベクターレグレッション(Support Vector Regression)」

SVMのハイパーパラメータ

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

ナイーブベイズ (単純ベイズ分類器)

TODO:

確率的なアプローチを利用して分類を行う機械学習の手法。

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

アダブースト

ランダムよりも少し精度がいいような弱い識別機を組みわせて、強い識別機を作成しようとする機械学習モデル

k近傍法

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

k平均法

TODO:

ニューラルネットワーク

脳機能に見られるいくつかの特性に類似した数理的モデル
ニューラルネットワークはシナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般を指す

マルコフ連鎖

TODO:

その他/用語など

偏差

値と平均値の差。

マスク配列

正則化

※過学習の回避

ドロップアウト法

※過学習の回避

順伝播

損失関数

誤差逆伝播法

指数関数と対数関数

シグモイド関数

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

e (w1x+w0) 1 + e (w1x+w0)   もしくは   1 1 + e -(w1x+w0)

ReLU関数 ( 正規化線形関数 )

混同行列

条件付き確率

P(A|B) = P(A∩B) P(B)

ベイズの定理

P(A|B) = P(B|A)P(A) P(B)

グリッドサーチ

様々なパラメーターの値の組み合わせでモデルを何度も構築し、最適なパラメータの値を算出する手法。

アンサンブル学習

複数のモデルを融合させて1つの学習モデルを生成する手法。
大きくバギングとブースティングの2つの手法に分けられる。

説明変数

学習で使用する入力データ。(教師データ、特徴量)

目的変数

教師あり学習で使用する実結果データ。( 従属変数や被説明変数 )

乗法公式

(x+a)(x+b) = x2 + (a+b)x + ab
(a+b)(a-b) = a2 - b2
(a+b)2 = a2 + 2ab + b2
(a-b)2 = a2 - 2ab + b2
(ax+b)(cx+d) = ac x2 + (ad+bc)x + bd

添付ファイル: filegradient_descent_sample1.png 515件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-11-06 (水) 20:25:40 (1630d)