ラビットチャレンジのE資格講座、応用数学に続いて機械学習です。
日本ディープラーニング協会 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)回帰問題
回帰問題とは、ある入力(数値)から出力(連続値)を予測する問題。
例)株価の予測
- 入力はベクトル。各要素は説明変数または特徴量と呼ぶ。
- 出力(目的変数)はスカラー値。
- 線形回帰はデータを直線で近似したもの。
- 非線形回帰はデータを曲線で近似したもの。
線形回帰モデル
- 教師あり学習(正解データから学習)
- 入力(説明変数)と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を用いて行っている。
##第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項目の場合を行っている。ここでのポイントは以下の通り。
- 欠損値の補完
- ラベルの文字列を数値化
- 新しい特徴量の作成
- データの可視化
- 予測の評価
##第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となった。
##第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$で実行。
###k平均法(k-means)
- 教師なし学習
- クラスタリング手法(分類とは違ってラベルが決まっていない)
- 与えられたデータをk個のクラスタに分類する。kは事前に決めておく。
####アルゴリズム
- k個のクラスタ中心の初期値を割り当てる。
- 各データ点を最も近いクラスタにグループ化する。
- 各グループに属するデータ点の位置から、新しいクラスタ中心を決める。
- 収束するまで2、3を繰り返す。
####ハンズオン
- 平面上に、標準偏差1の正規分布に従う乱数で、100個のデータを3組作成する。それぞれの中心は、(-5,-5)、(5,-5)、(0,5)。
- クラスタ数3でNumpyとscikit-learnによる計算を行った。
##第7章 サポートベクターマシン(SVM)
-
線形分離
線形モデルの正負(直線のどちら側か)で2値分類する。
線形判別関数は、最も近いデータ点との距離(マージン)を最大化するように決める。
マージンにデータ点が入り込まないようにする(ハードマージン)と分類できない場合もある。多少の入り込みを許容(ソフトマージン)することにより分類できる。 -
非線形分離
カーネル関数により特徴空間へ写像し、その空間で線形に分離する(カーネル法)。
###ハンズオン
以下の場合について実施している。
- 線形分離可能な場合
- 線形分離不可能な場合(RBFカーネル使用)
- ソフトマージン