DNNにおけるClassificationの種類まとめ

# 概要
"AI"とかいうやつの課員用教育ネタの続き
深層学習の出口レイヤを変えると簡単に問題を切り替えられることを自習させようかと…
備忘録も兼ねて残すこととした

- 実施期間: 2020年12月
- 環境：Keras

ここで説明する各モデルの出口の全結合レイヤについて記述する
それより前のレイヤ構成はケースバイケース

Number of Nodes : ノード数 [1]
Activation : 活性関数 [2]
Loss : ロスの算出方法 [3]
Accuracy metrics: Fit中の精度評価指標  [4]
Output: 出力の型

Kerasだと、それぞれ下記の引数がそれらとなる
Optimizerはadamである必要はない
[Dense](https://keras.io/ja/layers/core/#dense), [compile](https://keras.io/ja/models/model/)はそれぞれオフィシャルサイト参照のこと


```python
model.add(Dense([1], activation='[2]'))
model.compile(loss='[3]', optimizer='adam‘, metrics=['[4]'])
```

# Linear Regression
連続値である目的変数yを予測するモデルで線形回帰問題と呼ばれる
## Linear regression
基本形がこれ
モデルにXを入力すると予測値のy_hat（ここでは0.539）が出力される
KerasではDenseの引数にActivationを指定しなければデフォルトでLinearとなる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205257/903109b2-d9f6-01ce-010d-e6ecd31e163c.png)

## Multi-output regression
入力Xに対して複数の連続値目的変数yがあるモデルがこれ
出口の全結合レイヤのNode数はそのyの数（ここでは3つ）でTrainingさせておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205257/6b2949dc-854b-c0c4-4afd-e06736d9a7f0.png)

# Classification
Logistic regressionの一種がClassification
離散値である目的変数yを予測するモデルで分類問題と呼ばれる
モデル出口とyの型以外はRegressionと変わらず、ビビるに及ばない
なお、Logistic regressionとClassificationの違いは[ココ](https://stats.stackexchange.com/questions/127042/why-isnt-logistic-regression-called-logistic-classification)で議論されているので興味があれば参照
ここでは便宜上、出口レイヤがTrueやFalseを出力しているが、実際には連続値が出力される
それをユーザがif文などでTrue/Falseに読み替えなければならない

## Binary classification
モデルにXを入力すると予測値のy_hat（ここでは1(True)）が出力される
yが連続値から離散値になり、出口の全結合レイヤの引数がやや変わっただけ
あとは上述のRegressionと同じ
不良品か否かを当てるようなモデル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205257/95cc0de2-32d5-5f44-c571-bf63f0a1ff70.png)

## Multilabel binary classification
Multi-output regressionとほぼ同じ
実際は各Nodeから出力されるのは連続値で、これを0(False)か1(True)に丸める
ただ小生はHeuristicに、例えば0.3以上ならTrueとか閾値は柔軟にしてよいと思っている
Training時のy（例えば[1, 1, 0]）を各Nodeで予測するので、それぞれの出力は 0 <y_hat< 1 となる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205257/c0f57e1c-69b9-28dc-fc27-601f88404ac2.png)

## Multiclass classification
これだけ少し毛色が違う
Activationがsoftmaxとなっており、全Nodeからの出力中Trueは1つである
実際は各Nodeから出力されるのは確率値となり、従い全Nodeの出力合計は1.0になる
最大のものを1(True)、それ以外を0(False)とする
犬、猫、人の画像からそのどれかを当てるようなモデルに使う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205257/ef0f8add-f08e-1206-590f-21adcd54ff99.png)

# まとめ

| モデル              | # of nodes | Activation  | Loss  | Accuracy metrics | Output |
|:-------------------|------------|------------|------------|------------|------------|
| **Regression**      | 1  | Linear | MSE, etc. | accuracy  | 連続値 |
| **Multi-output regression** | 複数 | Linear  | MSE, etc. | accuracy  | 連続値 |
| **Binary classification** | 1  | sigmoid  | binary_crossentropy | binary_accuracy | 離散値(True/False)| 
| **Multilabel binary classification** | 複数 | sigmoid  | binary_crossentropy | binary_accuracy | 離散値(複数True/False)| 
| **Multiclass classification** | 複数 | softmax | categorical_crossentropy | categorical_accuracy | 離散値(単数True/False)| 

## “Class”と”Label”の違いについて
下図の場合、Classは3つありLabelは[犬, 猫, 人]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205257/a4089b3e-d1c5-dca4-48a5-d250699fa290.png)

以上