【データサイエンス】予測モデリング

# ０．はじめに																					
大学でデータサイエンスの講義を受講している者です。
あまりにも広範囲な分野であるため"広く浅く"情報整理したいため投稿。
内容のレベルは超入門編、個人的な感情も少し入り混じった備忘録。
（齟齬がある場合はご指摘いただけると助かります。）

#### データサイエンス学習全体像
[【データサイエンス】概要](https://qiita.com/AkihideKato/items/9dbce22bd87a9c8a3989)
[【データサイエンス】人工知能](https://qiita.com/AkihideKato/items/6381dd320ead9f893577)
[【データサイエンス】機械学習](https://qiita.com/AkihideKato/items/1db3312e8038bd75e89b)
[【データサイエンス】ディープラーニング](https://qiita.com/AkihideKato/items/92b0fb83b35ec08c4e02)
[【データサイエンス】分析の分類・確率分布](https://qiita.com/AkihideKato/items/6fdca6e22f03f0b9f17c)
[【データサイエンス】探索的データ分析](https://qiita.com/AkihideKato/items/9485e3f9803b1e8fe785)
[【データサイエンス】統計的検定](https://qiita.com/AkihideKato/items/8ff1b9bada50491b017c)
[【データサイエンス】予測モデリング](https://qiita.com/AkihideKato/items/ce8e697546d0424bea46)
[【データサイエンス】自然言語処理](https://qiita.com/AkihideKato/items/e545f36e268605fce9a6)
[【アルゴリズム】パーセプトロン](https://qiita.com/AkihideKato/items/fc9a8205154fe9b3090f)
[【データサイエンス】機械学習における関数](https://qiita.com/AkihideKato/items/6ec3b59ff581e7e3c4ad)
[【データサイエンス】確率](https://qiita.com/AkihideKato/items/c099772dfca7546a6802)

# １．予測モデリング
過去・現在のデータを元に将来の予測を行う分析分野
ここでは以下のように分類する
- ``回帰分析``
- ``線形判別``
- ``非線形判別``
- ``ロジスティック回帰``
- ``決定木``

# ２．回帰分析
散布図内に直線を用いることで少し未来のことを予測することができる分析

### 2-1.モデルを選定する
ここではR言語を用いる（lm()関数）詳しくは資料内参照	
　``①.intercRept・sppedが出力される	``
　``②.切片、回帰変数が決まったものを「モデル」とする。資料内ではcars.lmに格納``

### 2-2.応用例
**車のスピードとブレーキをかけて止まるまでの距離**
　``①.車のスピードとブレーキを止まるまでの距離のデータを用いる``
　（資料内>cars）
	
　``②.データを散布図上に表す``	

　``③.直線を求める``

　``④.新しいspped値を準備し１－３モデルに当てはめて予測を行う``

今後どの程度スピードを出した場合はどのくらいの距離で停止するのかが予測できる

### 2-3.直線はどのような方法で求めるか
最小二乗法と呼ばれる計算方法を用いる
具体的な計算工程が気になったので調べ出したら大幅に時間が溶けたので一部を記載

### 2-4.回帰分析の公式
目的変数 = 切片 + 回帰変数 * 説明変数``(y＝a＋bx)``
停まるまでの距離を求めたい、その場合は止まるまでの距離（目的変数）＝切片＋回帰係数×スピード（説明変数）
以下に関連する変数/係数を述べる

- #### 目的変数とは（結果）
結果となる数値、分析によって説明される側の変数

- #### 切片とは
説明変数の値が0の時の目的変数の予測値

- #### 説明変数とは（要因）
要因となる数値、独立変数とも言われる

- #### 回帰係数とは
座標平面上で回帰式で表される直線の傾き
回帰係数 ＝ 相関係数 ×（ B(距離)の標準偏差 ÷ A(スピード)の標準偏差 ）

- #### 相関係数とは
２つの値の関係の強さを示す数値
相関係数 ＝ 共分散 ÷（ A(スピード)の標準偏差 × B(距離)の標準偏差 ）

- #### 最小二乗法とは
回帰直線を求める際に使用する
　``①、線をたくさん引いて候補を準備する``

　``②、直線と点の差つまり全てのデータポイントとの距離の差を求めて二乗し和の累計を出す　（S)	``

　``③、Sが最小となる直線を選ぶ⇒全てのデータポイントに近い線が選ばれる	``

Sの値を曲線で表してみると、
一番データポイントから離れている直線で表した値Sは値が大きい
一番データポイントから近い直線で表した値Sは値が小さい
**``つまりSの値はU字のような曲線になる``**
そのＵ字の最小値の値を示した直線を採用する

# ３．線形判別
直線/曲線によってグループ分けをする考え
線形判別の直線
グループ間の分散とグループ内の分散を最大化するような直線を探す

# ４．非線形判別
線形ではない形状の直線を用いたグループ分け方法




# ５．ロジスティック回帰
2つに分類し判別する手法
変数を0か1かしかとらない
最終的にロジスティック関数として表す

### 5-1.分析例
Ｒ言語を用いてインディアンの健康データを分析する
（元データは資料内参照）
ゴールは糖尿と診断されたかどうかを分析する、``neg``か``pos``かで判断する（これを目的に学習させる）
健康データが事前にある
```R
#Sample関数を使用しデータをランダムな分割をする	
#TRUEは訓練用データFALSEはテストデータとして7：3の割合とする
sample <- sample(c(TRUE, FALSE), nrow(data), replace=TRUE,	
prob=c(0.7,0.3))	
train < data[sample, ]	
test < data[Isample, ]	
	
#3つ要素を用いて予測をさせる
model <- glm(diabetes ~ glucose +	
mass + pedigree, data = train)	
```

### 5-2.方法
　``①学習させるために血糖値やBMI値などの数値を利用する``

　``②学習用、訓練用、テスト用を7:3の割合で分ける``

　``③モデルを設定する``
``glm変数``を使用する、``glm``はロジスティック回帰モデルに使用する変数
``data = train``は``train``というデータフレームを使用している

　``④コードを出力し結果（係数）が表示される``
この結果が「モデル」となる

　``➄予測をさせてみる``
仮の2名（血糖値及びBMI値を設定）を予測する
結果として2名のような血糖値BMI値の方は高い確率で糖尿病になると予測される
```R
new <- data.frame( glucose = 190, mass = 30, pedigree = c(0.1,3,0)
```

``⑥テストデータで検証をする``
``pos``なのに``neg``と予測される場合や``neg``なのに``pos``と予測される場合を判定エラーとし
全体的に正しい予測結果がでたか精度を確認する

### 5-3.どうしてデータを分割するのか
過学習を防ぐため（★ここを理解するのに少々時間がかかった）

### 5-4.過学習とは
この時の状態（工程２の状態時）だと精度のよい成果を出すことはできるが
いざ別のデータでテストを行った時は精度の悪い結果が出てしまうようなこと
モデルを運用化することが難しい上に過剰に反応してしまうため成果としては✕
（応用例題cifar-10プロジェクト_工程4にて過学習が発生した例あり）


# ６．決定木
2つに分岐し構成されている図
最終的に0か1かたどり着く分岐方法を繰り返す

### 6-1.作成手順

　``①、まずルートノード（一番上）に全データが与えられ下に向かって分岐していく``

　``②、情報の差（情報利得）を求めて差の大きい分岐を上に置く``

　``③、複雑な決定木になった場合は情報を少なくしたいため刈り取りを行う``

　``④、判断結果を評価する：ROC曲線...etc``


### 6-2.情報利得とは
どちらがより効率の高い分岐かどうか判断する指標
エントロピーに用いる指標、親ノードの不純度の合計と子ノードの不純度の合計の差、ノード間の不純度が低いほど情報利得は大
よくわからんので一旦これ
- すっきり分けることができる ＝ **``情報利得が大きい``**
- すっきり分けられない ＝ **``情報利得が小さい``**

### 6-3.エントロピーとは
不確実性の指標のこと、ランダム的などちらに転ぶか不透明な指標	
上部の決定木（まだ分岐していない状態）はエントロピーが高い	
予測できない程エントロピーは高い、（予測できる＞予測できない）	
**``コイントスで裏ばっか出る⇒驚きがないのでエントロピーは0``**

例：スポーツマンか見極めるために「年齢」「身長」の属性を使い情報利得を比べる
-  **``「年齢」情報利得が大きい``**
年齢が低いほどスポーツマンの可能性が上がり年齢が高いほどスポーツマンではない可能性が高い
身長という属性と比べると年齢という属性を用いたほうがスポーツマンかそうでないか分類を明確にすることができる
よって情報利得は高い

- **``「身長」情報利得が小さい``**
年齢と比べると身長を材料にスポーツマンかそうでないか分けた際、年齢の属性より結果にばらつきが生まれる傾向がある
よって情報利得は小さい