E資格対策 応用数学・機械学習

# はじめに

E資格認定講座の受講レポートです。E資格の受験を検討されている方、E資格に向けて勉強中の方の参考になればという思いで公開することにしました。

# 応用数学

## 第１章 線形回帰

### 行列と行列式

#### スカラー、ベクトル、行列

* スカラー：普通の数。四則演算が可能。
* ベクトル：スカラーがセットになったもの。「大きさ」と「向き」を表す。
* 行列：スカラーを表にしたもの。ベクトルのベクトル。ベクトルの変換に使用される。

#### 連立方程式

関係式のセットのこと。行列を使うことで連立方程式をシンプルに表すことができる。

連立方程式は以下の３種類の行基本変形で解くことができる

* i行目をc倍する
* s行目にt行目のc倍を加える
* p行目とq行目を入れ替える

上記の変換は行列を左から掛けることで実現できる

#### 逆行列

* 「逆数」のような働きをする行列。
* 逆行列をかけることで、割り算のようなものを定義できる。

#### 単位行列
* 対角線上に１が並ぶ行列。
* 元の行列を変化させない「１」のような行列。

#### 逆行列の求め方

* 行基本変形を記録し、行列と対応させ、掛け算していけば求まる
* → この求め方を（ガウスの）吐き出し法という。

#### 逆行列が求まらない場合

* 解がない（１組に定まらない）連立方程式

#### 行列式の特徴

* ３つ以上のベクトルからできている行列式は展開できる   
  （面積の高さを分解して体積を求めることと同じ感覚）

### 固有値と固有ベクトル

$$A\vec{x} = λ\vec{x}$$

$A$：正方形行列
$\vec{x}$：固有ベクトル（一意に定まらない。比率が重要）
$λ$：固有値

#### 固有値分解

* 行列をある種の掛け算に分解する
* 行列を分解することで、似たような特徴を見つけ出すことができる

#### 特異値分解
* 長方形行列の場合の固有値分解のようなもの
* 長方形の行列とその転地行列をかけ合わせることで正方形行列を作り、固有値分解を行う
* → この手順により算出される固有値のようなものを特異値と呼ぶ
* 特異値分解の利用例：画像の圧縮
* 特異値が大きい部分が似ているかどうかで同じもの（画像）かどうか判定できる
* → 教師がなくても似ているもの同士をみつけることができる（分類できる）

## 第２章 確率・統計

### 集合

ものの集まりのことを集合という。それ以上細かく分割できないものを要素といい、集合は要素によってできている。

### 確率

#### 頻度確率(客観確率)

* 発生する頻度

#### ベイズ確率(主観確率)

* 信念の度合い
* 全数調査ができるわけではないが、条件をもとに確率を決める
* 主観的に観測する

計算上の取り扱いはどちらも同じ。どういう立場でみているのかが違う。

#### 同時確率
* Bという条件下でAが起こる確率

#### 条件付き確率
* ある事象Bが与えられた下で、Aとなる確率

同時確率と条件付き確率は区別する。同時確率より条件付き確率の方が大きくなる。

#### ベイズ則

条件の入れ替えが可能になる

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

### 記述統計

集団の性質を要約し、記述する
例：母集団（全データ）の平均を求める

### 推測統計

母集団から抽出した標本から逆算して元の集団の性質を推測する
例：工場の製品管理

### 確率変数

*　事象と結び付けられた数値
*　例：くじの当選金額、コインを投げたときの表の枚数

### 確率分布

* 確率変数が出る確率の分布
* 離散値の場合、表に書き表すことができる

### 期待値

* 平均の値
* 個数が定まらない場合 ⇛ 実現しそうな値、あり得そうな値

### 分散と共分散

#### 分散

データの散らばり具合。期待値とのずれ。

### 共分散

２つの値の傾向の比較。

* $σ^2$ > 0：似た傾向
* $σ^2$ < 0：逆の傾向
* $σ^2$ = 0：関係性に乏しい

### 標準偏差

分散の場合２乗を取るため単位が変わる。単位を戻すために平方根を取ったものが標準偏差である。データの散らばりを元の単位で示したもので、小さい程散らばりが少ない。

### 確率分布

#### ベルヌーイ分布

各事象（裏／表）の確率を一つの数式で表現できる

#### マルチヌーイ分布（カテゴリカル分布）

確率の掛け合わせ。（例：さいころの目。１の時、１以外の部分が０になる）

#### 二項分布

* ベルヌーイ分布の多施行版
* 二項係数（全体でn個あるものからx個選ぶ場合の数）をかける

![応用数学 講義資料 2020-11-22 21-40-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326104/f351f047-062b-e088-7a2a-9406d05cf93e.png)

* 不要な部分と重布している部分を二項係数の分母としてキャンセルしている
* 表が１回起きる確率 = λ

$x$と$n-x$が同じぐらいの大きさの時に二項係数が大きくなるため、山のような形（中心が大きくて、周りが小さい形）になる

#### ガウス分布

* 真の分布がわからなくてもサンプルが多ければ正規分布に近づく
* 全部足し合わせる（積分を取る）と面積が１になる（確率の考え方と一致する）

![応用数学 講義資料 2020-11-22 21-46-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326104/bcd8a814-8535-eab6-02bd-108d91bd9a5c.png)

σ：山の広がり
μ：平均値（中心の値）

### 推定

母集団を特徴づける母数（パラメータ、例：平均）を統計学的に推測すること。

* 母数：母集団が持っている数。母集団を特徴づける数。
* 点推定：１つの点を推定する
* 区間推定：範囲を推定する

#### 推定量と推定値

* 推定量（estimator）：推定値を求めるために利用する関数みたいなもの
* 推定値（estimate）：実際に求まった値

推定された値には^（ハット）をつける

### 標本平均

母集団から取り出した標本の平均値。一致性と不偏性の両方を満たすため、母集団を知るための重要な手がかりになる。

* 一致性：サンプル数が大きくなれば母集団に近づく
* 不偏性：サンプル数がいくらであっても、その期待値は母集団の値と同様

### 標本分散

* データが少数の場合、母集団の分散と比べてばらつきが小さくなる
* 一致性は満たすが、不偏性は満たさない
* 不偏性を満たさない課題を修正したものが**不偏分散**である

## 第３章 情報理論

### 情報科学

情報をどうやって取り扱うか、情報を同数量化するのかを考える。

### 自己情報量

![IMG_0044.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326104/01524378-30f4-1317-03ff-534039daae75.png)

### シャノンエントロピー

![IMG_0045.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326104/7ee926c6-8f72-3075-9844-188aa40d0d59.png)

### カルバック・ライブラー ダイバージェンス

* 同じ事象・確率変数における異なる確率分布P、Qの違いを表す。
* イメージ）想定していた分布Qと実際に得られた分布Pの違いが知りたい
* 距離のようなもの

![IMG_0046.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326104/d1166bb8-a27a-a3b8-1a37-1419a6c0e5cf.png)

### 交差エントロピー

* KLダイバージェンスの一部分を取り出したもの
* KLダイバージェンスとは異なり、距離のようなものとしては扱えない
* Qについての自己情報量をPの分布で平均している

![IMG_0047.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326104/76117bc2-a34b-19f2-630a-d6441332000d.png)

# 機械学習

## 導入

機械学習の個々のアルゴリズムは機械学習モデリングの１プロセスであり、全体像を理解することが大切。課題解決のために必ずしも機械学習を用いいる必要はなく、機械学習には技術的負債の高さやテストのしにくさなどといったデメリットが存在する。重要なことは課題を解決することであり、ルールベースで十分な場合は機械学習を使う必要はない。

## 線形回帰モデル

回帰問題とはある入力から出力を予測する問題のこと。直線で予測される場合は線形回帰、曲線で予測される場合は非線形回帰と呼ばれる。

### 入力
* m次元のベクトル（1の場合スカラ）
* 説明変数・特徴量と呼ばれることもある

### 出力
* 目的変数、スカラー値（入力のベクトルが多次元でも１次元）

### 概要

* 説明変数と目的変数のペアを教師データとする教師あり学習
* 入力とm次元パラメータの線形結合を出力するモデル
* 未知のパラメータ$\vec{w}$を最小二乗法により推定することが線形回帰で行うことである
* パラメータ$\vec{w}$は説明変数と目的変数が決まれば解析的に決まる
* 線形回帰モデルの場合、最尤法と最小二乗法の解が一致する


### 最小二乗法

* 平均二乗誤差（パラメータのみに依存する）を最小にするパラメータを探索   
* 微分して勾配がゼロになる点を見つける

### 単回帰と重回帰

* 単回帰モデル：説明変数が1次元
* 重回帰モデル：多次元
* 単回帰と重回帰で違いはほとんどない

### データ分割とモデルの汎化性能測定

* 学習用とテスト用のデータの二つに分けて、モデルの精度の検証を行う
* 学習データで学習（パラメータを推定）
* テストデータでモデルがどのくらい精度がでるか検証する
* 検証したいもの：モデルの汎化性能（未知のデータに対しての性能）

## 非線形回帰モデル

### 概要

* $\vec{x}$を一度基底関数$φ$によって非線形化して$\vec{w}$との線形結合をとる
* 数式は線形回帰と変わらない（最尤推定や最小二乗法で推定）
* $\vec{x}$を基底関数に写像することを基底展開法という

### ガウス基底関数   
* ある山の場所（平均の場所）   
* どれくらい広がるのか（バンド幅）

### 未学習と過学習

適切な表現力の**モデル**を使用してデータの構造を推測することが目標
**基底関数の個数、位置、バンド幅、正則化パラメータ**がモデリングに依存している

#### 未学習

* データの構造を十分に説明していない
* 十分小さな誤差を得られないモデル
* 対応策：表現力の高いモデルを使用する

#### 過学習

* 学習用データに対しての誤差は小さいが、未知のデータに対しての誤差が大きいモデル
* 表現力が高すぎる
* 対応策
    * 学習データを増やす
    * 不要な基底関数を削除したり、正則化法を利用したりして表現力を抑止する
 
### 正則化法

* モデルの複雑さに伴って値が大きくなる正則化項（罰則項）をつける
* パラメータに（原点近くに）制約をあたえる。制約の中でMSEを最小にする点をみつける。
* 正則化項がない場合 → 最小二乗推定
* 正則化項にL2ノルムを利用 → Ridge推定量
* 正則化項にL1ノルムを利用 → Lasso推定量

### Ridge推定量

* パラメータを０に近づけるよう推定

### Lasso推定量

* いくつかのパラメータを正確に０に推定
* スパース推定
* 不要な（予測に対する影響が小さい）基底関数や変数を排除することが可能

### パラメータ γ

* どの程度抑えるべきか（制約を与えるべきか）の指標
* γが小さい → 制約面が大きくなる
* γが大きい → 制約面が小さい

### モデル選択

#### 汎化性能

* 新たな入力に対する予測精度
* 汎化誤差（テスト集合の誤差）が小さいものが良い性能を持ったモデル
* 検証データでの性能を測ることで測定

#### ホールド・アウト法
* ２つに分割、学習用データで学習し、テスト用データで検証する
* 外れ値だけが検証用データに流れる場合もあるため、バランスを考えることが重要
* データ数が少ないと良い性能評価を与えない

#### クロスバリデーション
* イテレータごとに学習用と検証用データを使う
* イテレータ間では重複しない
* イテレータごとの精度の平均をCV値とする
* MSEのような残差平方和の場合、CV値が一番小さいモデルを選ぶ

**ホールド・アウトよりクロスバリデーションの方が汎用性能を測るにのには優秀**

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

ロジスティック回帰モデルは分類の問題を解くためのアルゴリズムで、ある入力を事前にわかっているクラスに分類する。ある実数の入力に対して、その実数がクラスに属する確率を0から１の値で出力。入力とパラメータの線形結合をシグモイド関数に入力にする。

### シグモイド関数

$$
σ(x) = \frac{1}{1 + exp(-ax)}
$$

パラメータが変わるとシグモイド関数の形が変わる

a：曲線の勾配
バイアス：段差の位置

MESや尤度などの基準の最大値・最小値を求めるには必ず微分の計算が必要になる。シグモイド関数の微分はシグモイド関数自身で表現することが可能なため最適化問題（最大値・最小値を求める問題）が解きやすくなる。この微分の計算の利点が出力が０から１に収まる関数が多数ある中で、シグモイド関数を利用する理由である。

### 最尤推定

* $w_0$、$w_1$ などの未知のパラメータ推測する方法
* もっともらしい分布を推測する

ロジスティック回帰モデルにおける最尤推定は確率$p$に関して最適化問題を解くことである。確率$p$は入力とパラメータの線形結合を入力とするシグモイド関数で表現されるため、パラメータが求まると確率が求まる。このためパラメータ$\vec{w}$に関して最適化問題を解くことと結果的には同じである。

最適化問題の微分計算を簡単にするため、尤度関数の対数を取った対数尤度関数を最大化する問題として考える。元の尤度関数が最大になる点と対数尤度関数が最大になる点が同じになることは数学的に証明されている。また尤度関数にマイナスをかけたものを考えることで、MSEと同様の最小化問題に置き換えることができる。

最尤法を使用するロジスティック回帰モデルでは対数尤度関数をパラメータで微分して0になる値を求める必要があるが、解析的にこの値を求めることは困難であるため逐次的にアルゴリズムを用いて解くことが必要となる。

### 勾配降下法

勾配降下法は反復学習によってパラメータを逐次的に更新するアルゴリズムである。ステップを繰り返すことで収束した点が最尤推定量の値になる。勾配降下法のモデルの収束のしやすさは学習率と呼ばれるハイパーパラメータで調整することができる。

勾配降下法では、パラメータを更新するのにN個全てのデータに対する和を求める必要があり、すべてのデータをメモリに載せられない、計算時間が膨大になるなどの課題が存在する。これらの課題は確率的勾配降下法を用いることで解決することができる。

### 確率的勾配降下法（SGD）

ランダムに選んだデータ１つを利用してパラメータを更新する。SGDでは見る点をどんどん変えていくためパラメータの更新の仕方が不規則になり収束の仕方が初期値に依存しないため、局所解が問題となるようなディープラーニングなどではよく使用される。

### モデルの評価

データに偏りがある場合、正解率が必ずしもいい指標とは限らない。課題の性質を理解し、再現率や適合率なども踏まえて適切に評価することが重要

#### 再現率（Recall）

誤りが多少多くても抜け漏れが少ない予測をしたい場合（FNを小さくしたい場合）

$$
\frac{TP}{TP + FN}
$$

#### 適合率（Precision）

見逃しが多くてもより正確な予測をしたい場合（FPを小さくしたい場合）

$$
\frac{TP}{TP + FP}
$$

#### F値

* タスクが明確でない場合に利用される
* 再現率と適合率の調和平均

**現場では再現率・適合率・F値をすべて出して比較する手法がよく取られる**

## 主成分分析

次元圧縮による情報のロスをできる限り少なくすることが目的。情報を分散の大きさとして捉え、変換後の分散が最大となる変換の軸を選ぶ。

### 最適解

目的関数の$\vec{a}$に関しての最適化問題を解くと無限に解が存在するため、「ノルムが１となる$\vec{a}$のみ考える」という制約を設ける。$\vec{a}$に関して最大化する点（ラグランジュ関数の微分が０となる点）を求めると最適解を求めることができる。最適解は元のデータの分散共分散行列の固有値と固有ベクトルであり、射影先の分散は固有値と対応する。

### 寄与率

* 情報量がどれくらい保持されているか
* ある軸が持っている情報量（分散）の全分散に対する割合

### 備考

次元圧縮を行うオートエンコーダーというディープラーニングモデルも存在し、ある特定の状況でオートエンコーダーを利用すると主成分分析の解と一致するという研究もある。主成分分析を使うかディープラーニングを用いてより豊かな表現力を得るかは複雑なモデルを利用するメリットがあるかにかかっており、状況に応じた使い分けと簡単なモデルをしっかり理解しておくことが重要である。

## k-近傍法（kNN）

k-近傍法は分類をするための機械学習手法。ある新しいデータ点の分類を行いたい場合は、その点の近傍k個を取得し、それらがもっとも多く所属するグループに分類する。kの値を変化させることで、分類結果は変化し、kが大きくなると決定境界はなめらかになる。kが１のときを特に最近傍法と呼ぶ。

## k-means

k-meansは与えらたデータをk個のクラスタに分類する（特徴の似ているものをグループ化する）アルゴリズムである。データにラベルは付与されていないため教師なし学習である。

#### アルゴリズム

1. 各クラスタ中心の初期値を設定する（kも事前に決める必要がある）
2. 各データ点に対して、各クラスタ中心との距離を計算する
3. データ点から最も距離が近いクラスタに点を割り当てる
4. 各クラスタの平均ベクトル（中心）を計算する
5. 収束するまで2, 3, 4の処理を繰り返す

**下記の値によってクラスタリングの結果は変わる**

#### クラスタリングの初期値

中心の初期値が離れているとうまくクラスタリングができるが、初期値が近いとうまくクラスタリングできない。初期値が近くならないように設定する方法と「k-means++」という手法が存在する。