LoginSignup
0
1

More than 3 years have passed since last update.

日本ディープラーニング協会 E資格 JDLA認定プログラム受講記録(その2)

Last updated at Posted at 2019-06-23

ラビットチャレンジのE資格講座、応用数学に続いて機械学習です。
card.png

日本ディープラーニング協会 E資格 JDLA認定プログラム受講記録(その1)
日本ディープラーニング協会 E資格 JDLA認定プログラム受講記録(その3)
日本ディープラーニング協会 E資格 JDLA認定プログラム受講記録(その4)
日本ディープラーニング協会 E資格 JDLA認定プログラム受講記録(その5)
日本ディープラーニング協会 E資格 JDLA認定プログラム受講記録(その6)


章の構成は以下の通り。

プロローグ
第1章:線形回帰モデル
第2章:非線形回帰モデル
第3章:ロジスティック回帰モデル
第4章:主成分分析
第5章:アルゴリズム(k近傍法/k平均法)
第6章:(ここでは割愛します)
第7章:サポートベクターマシーン

3.機械学習

プロローグ(機械学習モデリングプロセスについて)

  1. 問題設定

どのような課題を解決するのかを決める。
機械学習前提でなくてよい。ルールベースで解ければそれでよい。
機械学習の欠点として、記述的な敷居が高い(誰もが理解しているわけではない)、テストが実施しにくい、といったことがある。

  1. データ選定
    どのようなデータを集めるか決める。

  2. データの前処理
    きれいな形でデータが得られることは少ない。学習させられるようにデータを変換する。欠損値の対応、フォーマット変換、など。

  3. 機械学習モデルの選定
    モデル(アルゴリズム)として何を選ぶか決める。ディープラーニングも機械学習モデルのひとつ。

  4. モデルの学習(パラメータ推定)
    パラメータを決める。

  5. モデルの評価
    ハイパーパラメータの選定
    モデル精度を測る
    商用化出来るかの判断

第1章 線形回帰モデル

(1)回帰問題

回帰問題とは、ある入力(数値)から出力(連続値)を予測する問題。
例)株価の予測

  • 入力はベクトル。各要素は説明変数または特徴量と呼ぶ。 
  • 出力(目的変数)はスカラー値。
  • 線形回帰はデータを直線で近似したもの。
  • 非線形回帰はデータを曲線で近似したもの。

線形回帰モデル

  • 教師あり学習(正解データから学習)
  • 入力(説明変数)とm次元パラメータ($\boldsymbol{w}$)の線形結合を出力するモデル
\begin{align}

パラメータ : \boldsymbol{w} &= (w_{1}, w_{2},...,w_{m}) \in \mathbb{R}^{m}\\
予測値 : \hat{y} &= w^{T}x + b\\
\\

\end{align}

パラメータ:特徴量(入力値)が予測値に与える影響を決定する重みの集合。最小二乗法により推定する。最尤法でも解けるが、その場合は下記の$\epsilon$を正規分布と仮定する必要がある。

線形重回帰モデルを行列で表現すると、

y = X\boldsymbol{w} + \boldsymbol{\epsilon}

$\boldsymbol{\epsilon}$は誤差。$X$には切片(上の式で$b$)も含む。

データ分割:データを学習用データと検証用データに分割する。学習用データを用いてモデルの学習を行い、検証用データで汎化性能を測定する(学習データで検証しても汎化性能はわからない)。

(2)パラメータの推定

平均二乗誤差(Mean Squared Error, MSE)

データと出力の二乗誤差の平均で小さいほど直線とデータの距離が近い。

MSE = \frac{1}{n}\sum_{i=1}^{n}(\hat{y}_{i}-y_{i})^{2}

※テキストには学習データを意味する$train$が付いていたが自明なので省略。

最小二乗法

$MSE$を最小化するパラメータを求めればよいが、勾配が0となる点を求めればよい。

\boldsymbol{\hat{w}} = arg \quad min_{\boldsymbol{w}\in{\mathbb{R}}}MSE \qquad \frac{\partial}{\partial \boldsymbol{w}}MSE = 0

計算すると、

\frac{\partial}{\partial\boldsymbol{w}}
\Bigl\{
\frac{1}{n}\sum_{i=1}^{n}(\hat{y_{i}}-y_{i})^{2}
\Bigr\} = 0

行列表現で置き換える。

\frac{1}{n}\frac{\partial}{\partial\boldsymbol{w}}
\Bigl\{
(X\boldsymbol{w} - \boldsymbol{y})^{T}
(X\boldsymbol{w} - \boldsymbol{y})
\Bigr\} = 0
\frac{1}{n}\frac{\partial}{\partial\boldsymbol{w}}
\Bigl\{
(\boldsymbol{w}^{T}X^{T} - y^{T})
(X\boldsymbol{w} - \boldsymbol{y})
\Bigr\} = 0
\frac{1}{n}\frac{\partial}{\partial\boldsymbol{w}}
\Bigl\{
\boldsymbol{w}^{T}X^{T}X\boldsymbol{w} - \boldsymbol{w}^{T}X^{T}\boldsymbol{y}
- {\boldsymbol{y}}^{T}X{\boldsymbol{w}}
+ \boldsymbol{y}^{T}\boldsymbol{y}
\Bigr\} = 0

$\boldsymbol{y}^{T}X\boldsymbol{w}$はスカラーなので転置しても同じ値である。
つまり、$\boldsymbol{y}^{T}X\boldsymbol{w} = (\boldsymbol{y}^{T}X\boldsymbol{w})^{T} = {\boldsymbol{w}}^{T}X^{T}(\boldsymbol{y}^{T})^{T} =
2\boldsymbol{w}^{T}X^{T}\boldsymbol{y}$
なので、

\frac{1}{n}\frac{\partial}{\partial\boldsymbol{w}}
\Bigl\{
\boldsymbol{w}^{T}X^{T}X\boldsymbol{w} - 2\boldsymbol{w}^{T}X^{T}\boldsymbol{y}+\boldsymbol{y}^{T}\boldsymbol{y}
\Bigr\} = 0

となり、$\frac{d}{d\boldsymbol{w}}\boldsymbol{w}^{T}A\boldsymbol{w} = (A + A^{T})\boldsymbol{w}$を使って、

2X^{T}X\boldsymbol{w} - 2X^{T}\boldsymbol{y} = 0
\hat{\boldsymbol{w}} = (X^{T}X)^{-1}X^{T}\boldsymbol{y}

となり、推定したパラメータから、予測値$\hat{\boldsymbol{y}}$は以下のようになる。

\hat{\boldsymbol{y}} = X(X^{T}X)^{-1}X^{T}\boldsymbol{y}

ハンズオン

線形回帰のハンズオンではBoston Housingのデータを用いて、単回帰分析と2変数の重回帰分析をscikit-learnを用いて行っている。

Report ML Boston Housing.png

第2章 非線形回帰モデル

線形回帰は線形構造が前提。非線形な構造を捉えるには非線形回帰モデリングを用いる。

非線形回帰モデル

  • 説明変数に既定関数と呼ばれる非線形関数に掛けた(特徴空間に飛ばした)ものと、パラメータベクトルの線形結合を用いる。
  • 未知パラメータは線形回帰同様、最小2乗法や最尤法により推定する。

y_{i} = w_{0} + \sum_{i=1}^{m}w_{j}φ_{j}(\boldsymbol{x_{i}})+\epsilon_{i}
よく使われる既定関数
  • 多項式関数
  • ガウス型既定関数
  • スプライン関数/Bスプライン関数

予測の方法は線形回帰と同じで、

\hat{\boldsymbol{y}} = Φ(Φ^{T}Φ)^{-1}Φ^{T}\boldsymbol{y}

ただし、$Φ$は非線形関数の計画行列

正則化法

  • 未学習(underfitting)
    学習データに対して十分小さな誤差が得られていない状態
  • 過学習(overfitting)
    学習データに対しては小さな誤差が得られたが、テスト集合に対して誤差が大きい状態
  • 正則化
    過学習を回避する手段。やりすぎると未学習になってしまう。
  • 汎化性能 新たな入力に対する予測性能。これを高める必要があり、そのためには未学習、過学習を同時に防ぐ必要がある。
正則化法

誤差関数に、モデルが複雑になると値が大きくなるペナルティ項(正則化項)を加えることにより、モデルが複雑になり過ぎないようにする。$MSE$にペナルティ項を追加した誤差関数は以下のようになる。

S_{γ} = (\boldsymbol{y}-Φ\boldsymbol{w})^{T}(\boldsymbol{y}-Φ\boldsymbol{w})+γR(\boldsymbol{w})

$R(\boldsymbol{w})$:正則化項
γ:正則化パラメータ(平滑化パラメータ):程度の調整。クロスバリデーション(後述)で値を決める。

主な正則化法
  • Ridge推定量(L2ノルムを利用)
    パラメータを0に近づけるよう推定する(縮小推定)。
  • Lasso推定量(L1ノルムを利用)
    いくつかのパラメータを0に推定(スパース推定)。次元削減の効果もある。

ホールドアウト法

データを学習用とテスト用に分割し、学習用データで学習し、テスト用データで検証する方法。大量にデータがないと良い性能評価を与えない。

クロスバリデーション(交差検証)

データをm個に分割、m-1個で学習、残りの1つでテストを行う。テストデータをずらしてm回繰り返す。各回の精度の平均をCV値という。そして、複数のモデルからCV値が良いものを選択する。

第3章 ロジスティック回帰モデル

ロジスティック回帰モデル

  • 回帰といっているが分類問題(クラス分類)
  • 入力はm次元ベクトル
  • 出力は0 or 1
  • 線形結合の結果にシグモイド関数を掛けてラベルが1になる確率を求める。
P(Y=1|\boldsymbol{x})=\sigma(\boldsymbol{w}^{T}\boldsymbol{x}+b)

$\sigma$はシグモイド関数

\sigma(x)=\frac{1}{1+\exp(-ax)}
  • $0<\sigma<1$の範囲を取る。$a$が大きいとステップ関数に近づく。
  • 微分はシグモイド関数自身を使って書ける。
\frac{\partial\sigma(x)}{\partial x}=a\sigma(x)(1-\sigma(x))

尤度関数

  • 確率は固定されたパラメータから特定のデータがどの程度得られやすいか
  • 尤度はあるデータが得られたとき、特定のパラメータの値をとることがどの程度ありうるか

確率変数$Y$はベルヌーイ分布にしたがうので、

P(Y=1|\boldsymbol{x})=p

とすると、

P(Y=t|x)=p^{t}(1-p)^{1-t}

と書け、以下の学習セットが得られたとすると、

(\boldsymbol{x}_{1}, y_{1}), (\boldsymbol{x}_{2}, y_{2}) …(\boldsymbol{x}_{n}, y_{n})

それらを同時に発生させる確率は、確率変数$Y$の独立性を仮定すると、積の形で以下のように書ける。

p_{1}^{y_{1}}(1-p_{1})^{1-y_{1}}p_{2}^{y_{2}}(1-p_{2})^{1-y_{2}}...p_{n}^{y_{n}}(1-p_{n})^{1-y_{n}}\\
\begin{align}
&= \prod_{i=1}^{n}p_{i}^{y_{i}}(1-p_{i})^{1-y_{i}}\\ 
&= L(w_{0}, w_{1},...,w_{m})
\end{align}

このように、未知変数であるパラメータの関数の形で書け、これを尤度関数と呼ぶ。そしてこれを最大化するパラメータを推定すればよい。

対数尤度関数

尤度関数を直接最大化する点(パラメータ)を求めることは、対数尤度関数を最大化する点(パラメータ)を求めることと同じで、かつ対数尤度関数の最大化の方が簡単(積の形を和の形に出来るので)なのでこちらを使う。簡単のため符号を変えた以下の$E$を最小化する問題に置き換える。

\begin{align}
E(w_{0}, w_{1},...,w_{m}) &= -\log{L}(w_{0}, w_{1},...,w_{m})\\
&=-\sum_{i=1}^{n} \bigl\{t_{i}\log{p_{i}}+(1-t_{i})\log(1-p_{i})\bigr\}
\end{align}

勾配降下法(Gradient descent)

線形回帰モデルであれば最小二乗法で数学的に陽に解けるが、ロジスティック回帰モデルでは解析的に解くことは難しい。勾配降下法は反復学習により逐次的にパラメータを更新し、勾配を0に近づけていく。

w^{k+1}=w^{k}-\eta\frac{\partial E(w,b)}{\partial w} \\
b^{(k+1)}=b^{(k)}-\eta\frac{\partial E(w,b)}{\partial b}

$\partial$は学習係数。パラメータの収束のしやすさを調整。
事前学習でやったディープラーニングの逆伝播と同じ考え方。微分の計算は以下のようになる。

\begin{align}
\frac{\partial E(w,b)}{\partial w}&=\sum_{i=1}^{n}\frac{\partial E_{i}}{\partial p_{i}}\frac{\partial p_{i}}{\partial \boldsymbol{w}} \\
&= -\sum_{i=1}^{n}(\frac{t_{i}}{p_{i}}-\frac{1-t_{i}}{1-p_{i}})\frac{\partial p_{i}}{\partial \boldsymbol{w}}\\
&= -\sum_{i=1}^{n}(\frac{t_{i}}{p_{i}}-\frac{1-t_{i}}{1-p_{i}})p_{i}(1-p_{i})x_{i}\\
&= - \sum_{i=1}^{n}\bigl\{t_{i}(1-p_{i})-p_{i}(1-t_{i})\bigr\}x_{i} \\
&=-\sum_{i=1}^{n}(t_{i}-y_{i})x_{i}
\end{align}

途中、$p_{i}=\sigma(\boldsymbol{w}^{T}\boldsymbol{x}_{i}+\boldsymbol{b})$を代入しシグモイド関数の微分の性質を使った。 
$b$についての微分も同様にして以下のようになる。

\begin{align}
\frac{\partial E(w,b)}{\partial b}&=-\sum_{i=1}^{n}(t_{i}-y_{i})
\end{align}

この方法は全データを更新するため、計算コストが非常にかかる。
解決策として確率的勾配降下法がある。

確率的勾配降下法(SGD)

データをひとつずつランダムに選んで以下の式で更新していく方法。
勾配降下法でパラメータを1回更新する計算量で、n回更新出来る。

w^{(k+1)}=w{(k)}+\eta(t_{n}-y_{n})x_{n} \\
b^{(k+1)}=b^{(k)}+\eta(t_{n}-y_{n})

混同行列(Confusion Matrix)

分類タスクの評価方法。

表記 予測 結果 正解/不正解
TP : True Positive Positive Positive 正解
FP : False Positive Positive Negative 不正解
TN : True Negative Negative Negative 正解
FN : False Negative Negative Positive 不正解

Positive、Negativeが予測内容で、True、Falseが予測が合っていたか。

  • 正解率(Accuracy)

全件中、正解数の割合。偏りのあるデータに対して意味をなさない場合が多い。
80%スパムメールが来るときに、すべてスパムと分類すると正解率80%だが良い予測とは言えない。

\frac{TP+TN}{TP+FN+FP+TN}
  • 再現率(Recall)
\frac{TP}{TP+FN}

本当にPositiveなものを出来るだけ漏らさず予測したい。$FN$を減らしたい。$FP$が増えても構わない。
例)病気の検診で病気を人を見逃したくない。健康な人を病気と判断してしまうことは許容。

  • 適合率(Precision)
\frac{TP}{TP+FP}

Positiveと予測したものは実際にPositiveであってほしい。NegativeなものをPositiveと判定してほしくない。$FP$を減らしたい。$FN$は増えても構わない。
例)スパムメールの判定で、スパムが判定できない場合は許容しても、問題がないメールがスパムに振り分けられたくない。

  • F値(F-measure)
\frac{2Recall・Precision}{Recall+Precision}

再現率と適合率はトレードオフの関係。両方を同時に大きくすることは出来ない。その調和平均を取ったのがF値。

ハンズオン

Kaggleにあるタイタニックデータでロジスティック回帰の演習。12項目からなるデータで、そのうち11項目から生死を予測する。ここでは1項目だけを使った場合と2項目の場合を行っている。ここでのポイントは以下の通り。

  • 欠損値の補完
  • ラベルの文字列を数値化
  • 新しい特徴量の作成
  • データの可視化
  • 予測の評価

Report ML Titanic .PNG

第4章 主成分分析

  • 多変量のデータをなるべく情報を減らさないように変数を減らす
  • 学習データの分散が最大になる方向への線形変換を求める(ばらつきが大きいほど元の情報を多く含んでいるから)
  • 分析を容易にしたり、2、3次元に出来れば可視化することができる

解き方

学習データのベクトルを$x$、平均を$\bar{x}$とし、平均を0にシフトしたデータ行列$\bar{X}$で考える。線形変換前の分散共分散行列は、

Var(\bar{X})=\frac{1}{n}\bar{X}^{T}\bar{X}

係数ベクトル$\boldsymbol{a}$を用いて線形変換。

\boldsymbol{s}=(s_{1},...,s_{n})^{T}=\bar{X}\boldsymbol{a}

テキストでは$a_{j}$となっていましたが$j$は省略
線形変換後の分散は、

\begin{align}
Var(\boldsymbol{s})&=\frac{1}{n}\boldsymbol{s}^{T}\boldsymbol{s}\\
&=\frac{1}{n}(\bar{X}\boldsymbol{a})^{T}(\bar{X}\boldsymbol{a})\\
&=\frac{1}{n}\boldsymbol{a}^{T}\bar{X}^{T}\bar{X}\boldsymbol{a}\\
&=\boldsymbol{a}^{T}Var(\bar{X})\boldsymbol{a}\\
\end{align}

これを最大化する係数ベクトル$\boldsymbol{a}$を求めるのだが、無限に解が出てきてしまうので、ノルムに制約をつける。つまり、

arg\quad max_{\boldsymbol{a}\in \mathbb{R}^{m}}\quad \boldsymbol{a}^{T}Var(\bar{X})\boldsymbol{a}\\
\\
subject\quad to\quad \boldsymbol{a}^{T}\boldsymbol{a}=1 

これはラグランジュの未定係数法で解ける。
ラグランジュ関数$E(\boldsymbol{a})$は以下のように書ける。

E(\boldsymbol{a})=\boldsymbol{a}^{T}Var(\bar{X})\boldsymbol{a}-\lambda(\boldsymbol{a}^{T}\boldsymbol{a}-1)

これを$a$について偏微分し0となる$a$を求めればよい。

\begin{align}
\frac{\partial{E(\boldsymbol{a})}}{\partial{\boldsymbol{a}}} &= 2Var(\bar{X})\boldsymbol{a}-2\lambda\boldsymbol{a}=0\\
Var(\bar{X})\boldsymbol{a} &= \lambda\boldsymbol{a}
\end{align}

となる。これを満たす$\lambda$、$\boldsymbol{a}$は、$Var(\bar{X})$の固有値、固有ベクトルである。

線形変換後の分散は、

\begin{align}
Var(\boldsymbol{s}) &= \boldsymbol{a}^{T}Var(\bar{X})\boldsymbol{a}\\
&= \lambda\boldsymbol{a}^{T}\boldsymbol{a}
\end{align}

と書け、制約条件より、

Var(\boldsymbol{s})=\lambda

固有値は複数個あるが、大きい方からひとつ目を第一主成分、$k$番目を第$k$主成分と呼び、1つだけ採用した場合1次元PCA、2つの場合2次元PCA、…となる。なお、分散共分散行列は実対象行列なので、固有ベクトルは全て直行する。

寄与率

  • 全分散量
V_{total}=\sum_{i=1}^{m}\lambda_{i}
  • 第$k$成分の寄与率
c_{k}=\frac{\lambda_{k}}{V_{total}}
  • 第$k$成分での累積寄与率
    $k$次まで圧縮した場合、どの程度元の情報を保持しているか
r_{k}=\frac{\sum_{j=1}^{k}\lambda_{j}}{V_{total}}

累積寄与率が十分であれば、そこまで次元削減して良いと判断できる。

ハンズオン

乳癌検査データ。特徴量30でロジスティック回帰を行ったところ、97%の精度で分類できるモデルが構築できた。これを2次元まで削減したところ、主成分寄与率 0.43315126、第2成分寄与率 0.19586506、累積寄与率 0.62901632‬となった。

Report PCA Cancer .PNG

第5章 アルゴリズム(k近傍法、k平均法)

k近傍法(kNN, k-Nearest Neighbor method)

  • 分類問題のための手法(回帰にも使えるらしい)
  • ラベル分けされたデータがあり、新たなデータが与えられたとき、最も近い$k$個のデータの中で一番多いラベルを割り当てる。
  • $k$が変わると結果も変わる。
  • $k$が大きくなるほど、境界が滑らかになる。

ハンズオン

  • 平面上に、標準偏差1の正規分布に従う乱数でX座標、Y座標を決めた点を25個ずつ2組作成。中心をそれぞれ+1、-1だけずらしている。
  • それぞれラベルを0、1と付与。
  • Numpyとscikit-learnによる計算を行った。
  • それぞれ、$k=1, 3, 10$で実行。

Report kNN .PNG

k平均法(k-means)

  • 教師なし学習
  • クラスタリング手法(分類とは違ってラベルが決まっていない)
  • 与えられたデータをk個のクラスタに分類する。kは事前に決めておく。

アルゴリズム

  1. k個のクラスタ中心の初期値を割り当てる。
  2. 各データ点を最も近いクラスタにグループ化する。
  3. 各グループに属するデータ点の位置から、新しいクラスタ中心を決める。
  4. 収束するまで2、3を繰り返す。

ハンズオン

  • 平面上に、標準偏差1の正規分布に従う乱数で、100個のデータを3組作成する。それぞれの中心は、(-5,-5)、(5,-5)、(0,5)。
  • クラスタ数3でNumpyとscikit-learnによる計算を行った。

Report k-means .PNG

第7章 サポートベクターマシン(SVM)

  • 線形分離
    線形モデルの正負(直線のどちら側か)で2値分類する。
    線形判別関数は、最も近いデータ点との距離(マージン)を最大化するように決める。
    マージンにデータ点が入り込まないようにする(ハードマージン)と分類できない場合もある。多少の入り込みを許容(ソフトマージン)することにより分類できる。

  • 非線形分離
    カーネル関数により特徴空間へ写像し、その空間で線形に分離する(カーネル法)。

ハンズオン

以下の場合について実施している。

  • 線形分離可能な場合
  • 線形分離不可能な場合(RBFカーネル使用)
  • ソフトマージン

Report SVM .PNG

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1