HumanActivityRecognitionImplement-Transformer6

# アンサンブル
# アンサンブル-MODEL-
## 使用するモデル
- 1D-CNN
- Vision Transformer
- Conv.BackBone Transformer

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/514187ea-7139-c590-7f4d-acbc306ddad1.png)



## それぞれのモデルの出力データの解析
テストデータの数は8237個
内、
すべてのモデルが正解していたデータは7193個
すべてのモデルが不正解であったデータは86個
そのため、理想的な精度は98.96%となる。
すべてのモデルが不正解であったデータのラベルの内訳は以下の通り。

| Activity   | Upstairs | Downstairs | Walking | Jogging | Sitting | Standing |
|-------|----|----|----|----|---|---|
| Count | 37 | 15 | 13 | 12 | 6 | 3 |

モデルそれぞれの確度をインデックスごとにプロットした。
確度の大きいものが三色均一にあれば、最高確度を取るアンサンブルが効くと言える。
しかし、今回は1DCNNに対応する青が極端に少なく、最高確度を取るアンサンブルに寄与できないことがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/69368916-9f93-9aa1-7f44-46d016e2afbf.png)


## 方法1.確率分布の平均をとる
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/be9c8610-6014-3b59-6a99-f59e9c71f217.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/a75b3d45-d665-ca6e-08ae-6169e0bbbc70.png)


### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/b15f6f88-45fe-e34a-7e41-e84ca049a173.png)

| threshold | accuracy  | count |
|-----------|-----------|-------|
| 0.0       | 0.965886  | 8237  |
| 0.1       | 0.965886  | 8237  |
| 0.2       | 0.965886  | 8237  |
| 0.3       | 0.970102  | 8161  |
| 0.4       | 0.990747  | 7241  |
| 0.5       | 0.999766  | 4267  |
| 0.6       | 1.000000  | 558   |

## 方法2.多数決をとる
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/a3afb5f2-4af1-b9d9-0c3c-36c537b9e345.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/df10098f-0c2c-1155-e372-1f6e60f9efa3.png)

### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/4d13526e-9e1e-f8e6-3efd-0135fbc46683.png)

### 多数決票の内訳
| Vote num | Number |
|--------- |------- |
| 3 Vote   | 7236   |
| 2 Vote   | 902    |
| 1 Vote   | 99     |
|          |        |
| Total    | 8237   |


## 方法3.最も確度の高いものを採用する
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/d0f7cffd-0993-e2b0-726f-53d867a6e843.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/b590c4a8-6706-8cee-2c40-36b1b6c4c824.png)


### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/3e178010-21f4-aa07-8998-ebb437b33fc7.png)

| threshold | accuracy  | count |
|-----------|-----------|-------|
| 0.0       | 0.957873  | 8237  |
| 0.1       | 0.957873  | 8237  |
| 0.2       | 0.957873  | 8237  |
| 0.3       | 0.957989  | 8236  |
| 0.4       | 0.964649  | 8062  |
| 0.5       | 0.984129  | 6742  |
| 0.6       | 0.992286  | 3889  |
| 0.7       | 0.994644  | 1307  |
| 0.8       | 1.000000  | 219   |


# アンサンブル-ConvBBTLayers-

## 使用するモデル
すべてConv.BackBone Transformerアーキテクチャを使用した。
そのなかでTransformerブロックの数を変更したモデルを3種類用意しアンサンブルを行う。
- 3Layer TransfomerBLock
- 5Layer TransfomerBLock
- 7Layer TransfomerBLock

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/a6a8618a-bf7d-d000-5e43-981a7b224118.png)

## それぞれのモデルの出力データの解析
テストデータの数は8237個
内、
すべてのモデルが正解していたデータは7452個
すべてのモデルが不正解であったデータは129個
そのため、理想的な精度は98.43%となる。
すべてのモデルが不正解であったデータのラベルの内訳は以下の通り。

| Activity   | Upstairs | Downstairs | Walking | Jogging | Sitting | Standing |
|-------|----|----|----|----|---|---|
| Count | 50 | 36 | 17 | 16 | 6 | 4 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/90ee07fd-7cd1-0698-1d87-2dae49dbc299.png)

## 方法1.確率分布の平均をとる
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/bdb6ef43-32cc-f91a-136a-86aab67cc094.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/a8ad4096-0305-669d-32b1-11c1fa34139c.png)

### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/18bc593b-36be-8454-9617-396a762fd939.png)

| threshold | accuracy  | count |
|-----------|-----------|-------|
| 0.0       | 0.964672  | 8237  |
| 0.1       | 0.964672  | 8237  |
| 0.2       | 0.964672  | 8237  |
| 0.3       | 0.967785  | 8195  |
| 0.4       | 0.990588  | 7437  |
| 0.5       | 0.998592  | 4971  |
| 0.6       | 1.000000  | 1982  |


## 方法2.多数決をとる
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/cf69b8fb-9f50-5760-40ea-03649612f791.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/4c74e8d5-61a1-72f0-702d-d4bce1c3c480.png)

### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/4909741f-01eb-da22-5f46-475f8679638e.png)

### 多数決票の内訳
| Description  | Number |
|------------- |------- |
| Vote 3 num   | 7689   |
| Vote 2 num   | 515    |
| Vote 1 num   | 33     |
| Total        | 8237   |


## 方法3.最も確度の高いものを採用する
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/c451f09a-a85f-b490-b5d5-82e651219e0b.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/033eeebb-df55-f398-cd25-450f3156546f.png)

### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/2c9fde5a-e57c-c0a8-1e84-6cdcad2b5e9f.png)

| threshold | accuracy  | count |
|-----------|-----------|-------|
| 0.0       | 0.961879  | 8237  |
| 0.1       | 0.961879  | 8237  |
| 0.2       | 0.961879  | 8237  |
| 0.3       | 0.961991  | 8235  |
| 0.4       | 0.974610  | 7956  |
| 0.5       | 0.992965  | 6539  |
| 0.6       | 0.997646  | 3823  |
| 0.7       | 1.000000  | 1690  |


# アンサンブル-SEED-
## 使用するモデル

すべてConv.BackBone Transformerアーキテクチャを使用した。
そのなかでtorchのSEEDを変更したモデルを3種類用意しアンサンブルを行う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/591e91a0-942a-6846-e745-d3d0a360d830.png)

## それぞれのモデルの出力データの解析
テストデータの数は8237個
内、
すべてのモデルが正解していたデータは7842個
すべてのモデルが不正解であったデータは129個
そのため、理想的な精度は98.43%となる。
すべてのモデルが不正解であったデータのラベルの内訳は以下の通り。

| Activity   | Upstairs | Downstairs | Walking | Jogging | Sitting | Standing |
|-------|----|----|----|----|---|---|
| Count | 50 | 36 | 17 | 16 | 6 | 4 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/d7b78cdc-e357-d7c8-ae76-a997c63e2aa7.png)

## 方法1.確率分布の平均をとる
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/72177232-bc4a-a9ff-4bf7-39617553f346.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/8c507c76-1529-c640-6269-277b3ffc7187.png)


### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/4928a469-63e6-5d18-cc46-2d292a9edf22.png)

| threshold | accuracy  | count |
|-----------|-----------|-------|
| 0.0       | 0.965764  | 8237  |
| 0.1       | 0.965764  | 8237  |
| 0.2       | 0.965764  | 8237  |
| 0.3       | 0.969005  | 8195  |
| 0.4       | 0.990017  | 7513  |
| 0.5       | 0.997980  | 5446  |
| 0.6       | 1.000000  | 2121  |

## 方法2.多数決をとる
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/b78ffda8-6747-6945-7177-e3116692975d.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/92a0c58b-f648-721f-27c8-21b8c112332e.png)

### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/c4fceade-33ae-3a79-f996-cf1e0aa1d80f.png)

### 多数決票の内訳

| Description  | Number |
|------------- |------- |
| Vote 3 num   | 7537   |
| Vote 2 num   | 644    |
| Vote 1 num   | 56     |
| Total        | 8237   |


## 方法3.最も確度の高いものを採用する
### 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/e37f4b76-4944-fc0b-b6c0-e1a86512a924.png)

### 各確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/4988a121-f709-c208-b909-c58f411daa18.png)

### 累積確度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487085/a76a1912-6776-98ad-79fe-2c2c089c783c.png)

| threshold | accuracy  | count |
|-----------|-----------|-------|
| 0.0       | 0.961151  | 8237  |
| 0.1       | 0.961151  | 8237  |
| 0.2       | 0.961151  | 8237  |
| 0.3       | 0.961151  | 8237  |
| 0.4       | 0.968952  | 8052  |
| 0.5       | 0.988060  | 6784  |
| 0.6       | 0.996941  | 4250  |
| 0.7       | 0.998790  | 1653  |
| 0.8       | 1.000000  | 335   |


## 考察
また、アンサンブルを取ることによって精度が向上することについてはモデルのバイアスとバリアンスのトレードオフ関係にある。
単一のモデルでは表現力の大きなモデルというのはバリアンスが大きく、バイアスの小さなモデルとなる。
しかし、バイアスとバリアンスは共に小さいほうが望ましい。
そこでバリアンスの大きいモデルでアンサンブルを取ることで、バリアンスとバイアスの両方が下がり精度が向上する結果となったと考える。

より良いアンサンブルの結果を得るためにはランダムフォレストのアイデアを取り入れるのが良いかもしれない。
ランダムフォレストのアイデアというのは、
- ブートストラップで各モデルの学習データを決定する
- モデルに温度を持たせて多様性を確保する

温度を持たせることについてはモデルを別のものに変えることでも代用できると考えている。

また、アンサンブルするモデルについての結果をまとめる。
以下の3通り実験した。
- まるごとアーキテクチャを変えたアンサンブル
- 少しアーキテクチャを変えたアンサンブル
- シードを変えたアンサンブル

それぞれについて要約した結果を示す。
confidence-lineは確度の低いデータを捨て99％の精度を達成できるライン、または全投票とした。

|         | confidence-line | accuracy  |
|---------|-----------------|-----------|
| model   |                 |           |
| AVE     | 7241            | 96.59 %   |
| VOTE    | 7236            | 95.91 %   |
| MAX     | 3889            | 95.79 %   |
| layer   |                 |           |
| AVE     | 7437            | 96.37 %   |
| VOTE    | 7689            | 96.32 %   |
| MAX     | 6539            | 96.19 %   |
| seed    |                 |           |
| AVE     | 7513            | 96.58 %   |
| VOTE    | 7537            | 96.32 %   |
| MAX     | 4250            | 96.12 %   |

上表からわかることをまとめる。
- accuracyに大きな差はない
- 情報の欠落度と精度は同じ
- 情報が大きく捨てられてしまうMAXは不安定
- 似たモデルをアンサンブルに使ったほうがconfidence-lineは上がる

 
指摘を受けたモデルごとの分布が揃っていない件についてだが、私はこのままで良いと考える。
理由としては以下の2点がある。
・CNNベースかTransformerベースかで分布が大きく異なるが、その2つには表現力に大きく差がありモデルのバリアンス・バイアスが分布に現れているためこれを無下にする変換は望ましくない
・確度分布の閾値による予測の排除をしても精度は向上していないこと

実験は行い、その上での判断であることを留意していただきたい。

また、絶対値の大きな負の値との正規化することにより急な値になっていることが分かったため、分割平面のアイデアから負の値は不要であると考え、正規化前にソフトプラス関数（y=ln(1+e^x)）を適用し負の値の軽減を試みたがより悪化し急唆な出力となってしまった。