E資格受験に必要なJDLA認定講座の一つであるラビット・チャレンジ(https://ai999.careers/rabbit/)のレポート用ページです。
はじめに
【機械学習モデリングプロセス】
①問題設定
必ずしも機械学習を使う必要はない
②データ選定
GIGO(ガベージインガベージアウト)バイアスのかかったデータに注意
③データの前処理
ほとんどの時間はここに割かれる
欠損や外れ値をどう処理するか
EDA(探索的データ分析)
kaggleは学習にお勧め(実データがある。ほかの人のコードみられる)
④機械学習モデルの選定
⑤モデルの学習(パラメータ推定)
⑥モデルの評価
【講義で扱う内容】
※主に扱うのは太字の項目
学習種類 | タスク | 機械学習モデル | パラメータの 推定問題 | モデル 選択・評価 |
教師あり学習 | 予測 | 線形回帰 非線形回帰 | 最小2乗法 尤度最大化 | ホールドアウト法 交差検証法 |
↑ | 分類 | ロジスティック回帰 | 尤度最大化 | ↑ |
↑ | ↑ | 最近傍・K近傍アルゴリズム | ← | ↑ |
↑ | ↑ | サポートベクターマシン | マージン最大化 | ↑ |
教師なし学習 | クラスタ リング | K-meansアルゴリズム | ← | なし |
↑ | 次元削減 | 主成分分析 | 分散最大化 | なし |
教師あり学習
input,outputのペアのデータがある
教師なし学習
inputのみのデータがある
半教師あり学習
上記両方ある
【機械学習とは】
人がプログラムするのは認識の仕方ではなく学習の仕方(数学で記述)
線形回帰モデル
100文字以上の要約
【線形とはなにか】
ざっくり比例
$$ y = Ax+B(2次元)$$
$$ z = Ax+By+C(3次元)$$
$$ y = a_0+a_1x_1+a_2x_2+ … + a_{n-1}x_{n-1} = a_0 + \sum_{i=1}^{n-1} a_ix_i(n次元,超平面)$$
$$ x_0 = 1とすると $$
$$ y = \sum_{i=1}^{n-1} a_ix_i ,where x_0 = 1$$
さらにベクトルで表記すると
$$ y = \vec{a}^T \vec{x} ,where \vec{a}^T = ( a_0 a_1 … a_{n-1})$$
【回帰問題】
ある入力(離散あるいは連続)から出力(連続)を予測する
直線で予測→線形回帰
曲線で予測→非線形回帰
【回帰で扱うデータ】
入力(各要素を説明変数または特徴量と呼ぶ)
m次元のベクトル
$$ \vec{x} = {(x_1, x_2,…,x_m)}^T ∈ \mathbb{R}^m$$
出力(目的変数)
スカラー値(目的変数)
$$ y ∈ \mathbb{R}^1 $$
【線形回帰モデル】
回帰問題をとくための気が気学習モデルのひとつ
教師あり学習
入力とm次元パラメータの線形結合を出力するモデル
※慣例として予測値にはハットをつける
$$ パラメータ \vec{w} = {( w_1, w_2, … ,w_m)}^T ∈ \mathbb{R}^m $$
$$ 線形結合 \hat{y} = \vec{w}^T\vec{x}+w_0 $$
パラメータwは未知
→最小二乗法で推定
説明変数が1次元の場合、単回帰モデルと呼ぶ
データへの仮定 データは回帰直線に誤差が加わり観測されていると仮定
$$ y = w_0 + w_1x_1 + \epsilon $$
説明変数が多次元の場合(m>1)、重回帰モデル呼ぶ
$$ \vec{y} = X\vec{w} $$
Xを計画行列という
【データの分割とモデルの汎化性能測定】
学習用データ:機械学習モデルの学習に利用するデータ
検証用データ:学習済みモデルの精度を検証するためのデータ
なぜ分割するか
モデルの汎化性能を測定するため
未知のデータに対してどれくらい精度が高いかを測りたい
【推定】
線形回帰モデルのパラメータは最小二乗法で推定
平均二乗誤差(残差平方和)
データとモデル出力の二乗誤差の和
$$ \bf{二乗誤差は一般に外れ値に弱い} $$
→Huer損失,Tukey損失(外れ値につよい)
最小二乗法
学習データの平均二乗誤差を最小とするパラメータを探索
平均二乗誤差の最小化は勾配が0になる点を求めればよい
$$ MSE_{train} = \frac{1}{n_{train}} \sum_{i=1}^{n_{train}} { ( \hat{y}_i^{train} – y_i^{train} ) }^2$$
$$ \frac{\partial}{\partial w} MSE_{train} = 0 $$
$$ ⇒ \hat{\bf{w}} = {(X^{(train)T}X^{(train)})}^{-1}X^{(train)T}\bf{y}^{(train)} $$
回帰係数
$$ \hat{\bf{w}} = {(X^{(train)T}X^{(train)})}^{-1}X^{(train)T}\bf{y}^{(train)} $$
※逆行列が常に存在するとは限らない
予測値
$$ \hat{\bf{y}} = X{(X^{(train)T}X^{(train)})}^{-1}X^{(train)T}\bf{y}^{(train)} $$
※yにかかる行列を射影行列ともいう
【memo】
Vapnikの原理
ある問題を解くとき,その問題よりも難しい問題を途中の段階で解いてはならない
例 回帰問題でランキング問題を解くべきではない
密度比推定
Vapnikの原理を体感するにはよい問題
誤差があまりにも大きいとき→モデルに考慮する要素が漏れている可能性が高い
線形回帰では最小2乗法と最尤法による解は一致するらしい(なんでだろ)
おすすめ本
機械学習のエッセンス
イラストで学ぶ機械学習
実装演習
設定:ボストンの住宅データセットを線形回帰モデルで分析
課題:部屋数が4で犯罪率が0.3の物件はいくらになるか?
結果: エビデンス
実装演習用のコードダウンロードできるの知らなくて動画に移ってるのがんばって写経してました汗
【memo】
5部屋以上のデータしかないデータセットで学習した場合、5部屋未満の予測はうまくいかない場合がある⇒外挿問題
非線形回帰モデル
100文字以上の要約
【非線形な回帰を考えたい】
例
$$ y = w_0 + w_1x + w_2x^2+w_3x^3 $$
$$ y = w_0 + w_1\sin{x} + w_2\cos{x}+w_3\log{x} $$
⇒Idea:単回帰重回帰のxの代わりにφ(x)を用いる(xがφ(x)に代わるだけ)
※xからφ(x)に置き換えてもwについては線形のまま
$$ 予測モデル:\hat{y} = w_0 + w_1\phi_1(x)+ w_2\phi_2(x) … + w_n\phi_n(x)$$
$$ 重みwについては線形、 \phi(x)を既定関数と呼ぶ$$
【基底展開法】
回帰関数として基底関数(既知の非線形関数)とパラメータベクトルの線形結合
未知パラメータは線形回帰モデルと同様に最小2乗法や最尤法により推定
$$ y_i = f(x_i) + \epsilon_i $$
$$ y_i = w_0 + \sum_{j=1}^{m} w_j \phi_j(x_i) + \epsilon_i $$
よく使われる既定関数
多項式関数
ガウス型基底関数
スプライン関数・Bスプライン関数
【非線形回帰モデル】
$$ 説明変数 \bf{x_i} = (x_{i1},x_{i2}, …,x_{im}) ∈ \mathbb{R}^m$$
$$ 非線形関数ベクトル \bf{\phi}({\bf{x_i}}) = {(\phi_1(\bf{x_i}),\phi_2(\bf{x_i}), …,\phi_k(\bf{x_i}))}^T ∈ \mathbb{R}^k$$
$$ 計画行列 \Phi^{(train)} = { (\bf{\phi}({\bf{x_1}}),\bf{\phi}({\bf{x_2}}) ,…,\bf{\phi}({\bf{x_n}}) )}^T ∈ \mathbb{R}^{n×k}$$
$$ 最小2乗法(最尤法)予測値 \hat{\bf{y}} = \Phi{(\Phi^{(train)T}\Phi^{(train)})}^{-1}\Phi^{(train)T}\bf{y}^{(train)} $$
基底展開法も線形回帰と同じ枠組みで推定可能
【未学習(underfitting)と過学習(overfitting)】
学習データに対して十分小さな誤差が得られないモデル⇒未学習
(対策)モデルの表現力が低いため表現力の高いモデルを利用する
小さな誤差は得られたけどテスト集合誤差との差が大きいモデル⇒過学習
(対策1)学習データの数を増やす
(対策2)不要な基底関数(変数)を削除して表現力を抑止
(対策3)正則化法を利用して表現力を抑止
いかに過学習(overfitting)を抑止するかがポイント
不要な基底関数を削除←(対策2)
基底関数の数、位置やバンド幅によりモデルの複雑さが変化
解きたい問題に対して多くの基底関数を用意してしまうと過学習の問題が起こるため適切な基底関数を用意(CVなどで選択)
正則化法(罰則化法)←(対策3)
「モデルの複雑さに伴ってその値が大きくなる正則化項(罰則項)を課した関数」を最小化
正則化項(罰則項)
形状によっていくつもの種類がありそれぞれ推定量の性質が異なる
モデルの曲線のなめらかさを調節⇒適切に決める必要あり
MSEを小さくなるようにwをきめたい。wが大きくなり過ぎないように罰則項をつける
wがおおきくなる⇒いろんな基底が効いてくる
正則化の例のあの図の意味
解きたいのはminMSEただし正則化項R(w)<=r
(最適化)KKT条件より
minMSE+λR(w)
横軸w0,縦軸w1であまり大きくならないよう(円orひし形の内部)にwを決める
楕円はMSEを示している
MSEの最小は楕円の中心(正則加項なしの場合のここが解)
楕円の等高線を広げていって接した部分が正則化項ありの場合の解
Lasso推定量(ひし形)
いくつかのパラメータを正確に0に推定
とがっているので0になりやすい
Ridge推定量(円)
パラメータを0に近づけるよう推定
正則化項の係数γ(ハイパーパラメータ)をどう決めるか?
→適切なモデル(汎化性能がたかいモデル)は交差検証法で決定
【ホールドアウト法と交差検証法】
ホールドアウト法
有限のデータを学習用とテスト用の2つに分割、「予測精度」「誤り率」を推定する
学習用多い、テスト用少ない⇒学習精度良い、性能評価精度悪い
学習用少ない、テスト用多い⇒学習精度悪い、性能評価精度良い
データが大量にある場合を除いて良い性能評価を与えないという欠点がある
例:外れ値がテストデータに入ってしまった場合
クロスバリデーション(交差検証法)
イテレーションごとにテスト用データをローテーションする
各イテレーションの精度の平均をCV値という
学習に用いたデータを用いて精度を評価してはならない
【memo】
オッカムの剃刀「ある事柄を説明するためには、必要以上に多くを仮定するべきでない」
赤池情報量規準(AIC)によるモデル選択
ディープラーニングでは過学習している状況でも学習を続けるとtestデータの誤差が下がってくる場合もある
ハイパーパラメータの調整 ベイズ最適化が最近はよく使われる
実装演習
ロジスティック回帰モデル
100文字以上の要約
【分類問題】
ある入力(数値)からクラスに分類する問題
【分類で扱うデータ】
入力:m次元のベクトル
出力:0or1の値←離散値なのが分類問題の特徴
【識別的アプローチ】
p(Ck|x)を直接モデル化
p(Ck|x)はxがCkに分類される確率
ロジスティック回帰は識別的アプローチ
【生成的アプローチ】
p(Ck)とp(x|Ck)をモデル化しその後
ベイズの定理を用いてp(Ck|x)を求める
外れ値の検出ができる
【分類問題の出力】
出力は0or1
実数全体から0-1への変換が必要⇒シグモイド関数を使う
【シグモイド関数】
入力は必ず実数、出力は必ず0-1の値
クラス1に分類される確率を表現
$$ \sigma(x) = \frac{1}{1+\exp{(-ax)}}$$
aが大きくなるほど変化が急になる
【尤度関数】
対数を取る意味⇒確率pの積を何重にもとると桁落ちの恐れがある
【勾配降下法】
ロジスティック回帰は解析的には解けないため
パラメータの更新を繰り返し最小となる値を探す
nが巨大になった時に計算時間が莫大になる
→確率的勾配降下法で解決
【確率的勾配降下法(SGD)】
データを一つずつランダムに(確率的に)選んでパラメータを更新
【memo】
確率的勾配降下法http://ibis.t.u-tokyo.ac.jp/suzuki/lecture/2018/kyoto/Kyoto_02.pdf
実装演習
主成分分析
100文字以上の要約
多変量データを持つ構造をより小数個の指標に圧縮
少数変数を利用した分析や可視化(2・3次元の場合)が実現可能
分散が最大となるような次元圧縮を行い、情報の損失を抑える
射影したデータのバラツキが大きいほど、もとのデータの情報を多く含んでいると考えられる。
【memo】
教師なし学習については式を追うというよりは何をやっているかを先ず押さえる
主成分分析 – 統計科学研究所https://statistics.co.jp/reference/software_R/statR_9_principal.pdf
実装演習
サポートベクターマシン
100文字以上の要約
サポートベクターとはデータを分割する直線に最も近いデータのこと
サポートベクターを定めて分割線が決まればどのクラスに属しているのか決めることができる
【メリット】
データの次元が大きくなっても識別精度がいい
最適化すべきパラメータが少ない
【デメリット】
学習データが増えると計算量が膨大になる
基本的に2クラス分類に特化
スケーリングが必要
もともと2クラス分類問題のために考案されたが、汎化性能、応用分野の広さ(回帰問題や教師学習)近年最も注目を集めている
【memo】
SVM(サポートベクターマシン)とはSVM(サポートベクターマシン)とは
実装演習
感じたこと
丁寧な解説でわかりやすかった
動画ロジスティック回帰以降の説明があっさりすぎない?SVMに関してはゼロ
レポート項目ごとにページ分けた方がいい気がしてきた
実装演習に時間かけ過ぎかな?
時間
11/28 2:15 線形回帰(動画前編2:12くらい)
11/28 2:30 線形回帰(実装演習)
12/01 1:45 非線形回帰(動画後編1:18くらい)
12/02 1:20 非線形回帰(実装演習)
12/02 0:45ロジスティック回帰(動画後編1:58くらい)
12/04 0:30 動画見終わる
12/04 0:45 ステージテスト
12/04 1:45 ロジスティック回帰(実装演習)
12/05 1:30 主成分分析(実装演習)
12/05 1:30 SVM(実装演習)
合計 14:35(うち実装演習8:35)
コメント