---
# System prepended metadata

title: 圖形識別 - 利用SVM進行人臉辨識預測並使用PCA&LDA進行降維

---

圖形識別 - 利用SVM進行人臉辨識預測並使用PCA&LDA進行降維
===
github:https://github.com/Hank860809/Base-on-SVM-on-Face-Recognize-with-PCA-LDA-Dimension-Reduction
## 一、資料來源
人臉數據庫:https://mitlab.ndhu.edu.tw/~ccchiang/PR/att_faces.zip

資料夾內共有40個資料夾 每個資料分別為獨立的一個人
檔案格式為92*112 = 10304個像素點 檔案為pgm格式
每人分別為十張圖片編號為1~10 總共具有400個pgm檔案

## 二、資料預處理

我將使用matplotlib.pyplot取得pgm的灰度值
並將每個資料夾內的1~5的圖片作為訓練用圖片
6~10作為測試圖片
```python
import matplotlib.pyplot as plt

# 資料預處理:將資料1~5當成訓練資料用的圖片，6~10作為訓練用的圖片
for i in range(1,41):
    for j in range(1,11):
        if j <= 5:
            train_data.append(plt.imread('att_faces/s{}/{}.pgm'.format(i,j), -1))
            train_true.append(i)
        else:
            test_data.append(plt.imread('att_faces/s{}/{}.pgm'.format(i,j), -1))
            test_true.append(i)
```

將資料轉換為1*10304的矩陣
```python=
train_data = []
test_data = []
train_true = [] # 真實訓練資料標籤
test_true = []  # 真實訓練資料標籤
train_img = []  # 圖片訓練集
test_img = []   # 圖片測試集

# 將訓練資料轉成一維陣列
for image in train_data:
    img_to_1D = []
    for x in range(image.shape[0]):
        for y in range(image.shape[1]):
            img_to_1D.append(image[x][y])
    train_img.append(img_to_1D)

# 將測試資料轉成一維
for image in test_data:
    img_to_1D = []
    for x in range(image.shape[0]):
        for y in range(image.shape[1]):
            img_to_1D.append(image[x][y])
    test_img.append(img_to_1D)

# 轉成陣列形式
train_img = np.array(train_img)
test_img = np.array(test_img)
train_true = np.array(train_true)
test_true = np.array(test_true)
```
## 三、主程式

### 使用到的套件
```python=
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
```

### 顯示圖片函式
方便看降維後逆轉換的圖片結果
```python=
def show_img(figure_num, n,img_set):
    fig = plt.figure(figure_num)
    for i in range(n):
        tmp_img = img_set[i * 5].reshape(112,92)
        plt.subplot(int(np.ceil(n/5)),5,i+1)
        plt.imshow(tmp_img,cmap='gray')
    plt.show()
```
### 完整程式碼
```python=
# Hackmd:https://hackmd.io/9X_MuHSERz-_sfctp7ThJw
# github:https://github.com/Hank860809/Base-on-SVM-on-Face-Recognize-with-PCA-LDA-Dimension-Reduction

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

def show_img(figure_num, n,img_set):
    fig = plt.figure(figure_num)
    for i in range(n):
        tmp_img = img_set[i * 5].reshape(112,92)
        plt.subplot(int(np.ceil(n/5)),5,i+1)
        plt.imshow(tmp_img,cmap='gray')
    plt.show()

train_data = []
test_data = []
train_true = [] # 真實訓練資料標籤
test_true = []  # 真實測試資料標籤
train_img = []  # 訓練集
test_img = []   # 測試集

# 資料預處理:將資料1~5當成訓練資料用的圖片，6~10作為訓練用的圖片
for i in range(1,41):
    for j in range(1,11):
        if j <= 5:
            train_data.append(plt.imread('att_faces/s{}/{}.pgm'.format(i,j), -1))
            train_true.append(i)
        else:
            test_data.append(plt.imread('att_faces/s{}/{}.pgm'.format(i,j), -1))
            test_true.append(i)

# 將訓練資料轉成一維陣列
for image in train_data:
    img_to_1D = []
    for x in range(image.shape[0]):
        for y in range(image.shape[1]):
            img_to_1D.append(image[x][y])
    train_img.append(img_to_1D)

# 將測試資料轉成一維
for image in test_data:
    img_to_1D = []
    for x in range(image.shape[0]):
        for y in range(image.shape[1]):
            img_to_1D.append(image[x][y])
    test_img.append(img_to_1D)

# 轉成陣列形式
train_img = np.array(train_img)
test_img = np.array(test_img)
train_true = np.array(train_true)
test_true = np.array(test_true)

# param_grid 為GridSearchCV 預設參數
param_grid = {'C': [1e3, 5e3, 1e4, 5e4, 1e5],
              'gamma': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.1], }
pca_clf = GridSearchCV(SVC(kernel='linear', class_weight='balanced'),param_grid)
lda_clf = GridSearchCV(SVC(kernel='linear', class_weight='balanced'),param_grid)

# PCA 10,20,30,40,50維訓練
for i in range(10,51,10):
    print()
    print('第{}維:'.format(i))
    myPCA = PCA(n_components=i).fit(train_img)
    pca_train_img = myPCA.transform(train_img)
    pca_test_img = myPCA.transform(test_img)

    pca_pred = pca_clf.fit(pca_train_img, train_true)
    pca_test_pred = pca_pred.predict(pca_test_img)
    pca_result = confusion_matrix(test_true, pca_test_pred)

    # 準確率
    pca_accuracy = str(accuracy_score(pca_test_pred,test_true)*100)+"%"
    pca_report = classification_report(test_true,pca_test_pred)
    # 列印混合矩陣
    # print('PCA混淆矩陣:')
    # for j in range(len(pca_result)):
    #     for k in range(len(pca_result[j])):
    #         print(pca_result[j][k],end=" ")
    #     print()
    # 計算正確預測個數
    true_count = 0
    for j in range(len(pca_result)):
        true_count += pca_result[j][j]
    # 錯誤預測個數
    false_count = 200 - true_count
    # 統計資料
    print('PCA正確預測個數:{}  錯誤預測個數:{} 準確率:{}'.format(true_count,false_count,pca_accuracy))
    # 列印混合矩陣
    print('PCA混淆矩陣:')
    print(pca_result)
    print('PCA報告:')
    print(pca_report)
    # 將降為後的資料進行的逆轉換成原本資料
    # data_inverse = myPCA.inverse_transform(pca_test_img)
    # show_img(1,20,data_inverse)

    # 因為LDA模型在SKlearn 維度只接受到0~min(n_features, n_classes-1)之間的維度，因為我們只有40個類別，因此最大維度只能到39
    if(i<40):
        myLDA = LDA(n_components=i).fit(pca_train_img, train_true)
        lda_train_img = myLDA.transform(pca_train_img)
        lda_test_img = myLDA.transform(pca_test_img)

        lda_pred = lda_clf.fit(lda_train_img, train_true)
        lda_test_pred = lda_pred.predict(lda_test_img)
        lda_result = confusion_matrix(test_true, lda_test_pred)

        # 準確率
        lda_accuracy = str(accuracy_score(lda_test_pred, test_true) * 100) + "%"
        lda_report = classification_report(test_true,lda_test_pred)
        # 計算正確預測個數
        true_count = 0
        for j in range(len(lda_result)):
            true_count += lda_result[j][j]
        # 錯誤預測個數
        false_count = 200 - true_count
        # 統計資料
        print('LDA正確預測個數:{}  錯誤預測個數:{} 準確率:{}'.format(true_count, false_count, lda_accuracy))
        # 列印混合矩陣
        print('LDA混淆矩陣:')
        print(lda_result)
        print('LDA報告:')
        print(lda_report)

```

## 四、預測結果
    第10維:

    PCA正確預測個數:173  錯誤預測個數:27 準確率:86.5%

    PCA混淆矩陣:
    [[4 0 0 ... 0 0 0]
     [0 5 0 ... 0 0 0]
     [0 0 5 ... 0 0 0]
     ...
     [0 0 0 ... 5 0 0]
     [0 0 0 ... 0 5 0]
     [0 0 0 ... 0 0 5]]

    PCA報告:
                  precision    recall  f1-score   support

               1       1.00      0.80      0.89         5
               2       0.62      1.00      0.77         5
               3       1.00      1.00      1.00         5
               4       0.83      1.00      0.91         5
               5       1.00      0.80      0.89         5
               6       1.00      1.00      1.00         5
               7       1.00      1.00      1.00         5
               8       1.00      1.00      1.00         5
               9       1.00      1.00      1.00         5
              10       1.00      0.80      0.89         5
              11       0.71      1.00      0.83         5
              12       1.00      1.00      1.00         5
              13       1.00      1.00      1.00         5
              14       1.00      0.20      0.33         5
              15       0.83      1.00      0.91         5
              16       0.83      1.00      0.91         5
              17       0.00      0.00      0.00         5
              18       0.83      1.00      0.91         5
              19       1.00      0.80      0.89         5
              20       1.00      1.00      1.00         5
              21       1.00      1.00      1.00         5
              22       1.00      1.00      1.00         5
              23       1.00      1.00      1.00         5
              24       0.83      1.00      0.91         5
              25       0.71      1.00      0.83         5
              26       1.00      1.00      1.00         5
              27       1.00      0.20      0.33         5
              28       0.50      0.60      0.55         5
              29       1.00      1.00      1.00         5
              30       1.00      1.00      1.00         5
              31       1.00      1.00      1.00         5
              32       1.00      0.40      0.57         5
              33       1.00      1.00      1.00         5
              34       1.00      1.00      1.00         5
              35       1.00      0.40      0.57         5
              36       0.38      0.60      0.46         5
              37       0.83      1.00      0.91         5
              38       0.83      1.00      0.91         5
              39       1.00      1.00      1.00         5
              40       1.00      1.00      1.00         5

        accuracy                           0.86       200
       macro avg       0.89      0.86      0.85       200
    weighted avg       0.89      0.86      0.85       200


    ------------------------------------------------------------
    LDA正確預測個數:177  錯誤預測個數:23 準確率:88.5%

    LDA混淆矩陣:
    [[4 0 0 ... 0 0 0]
     [0 5 0 ... 0 0 0]
     [0 0 5 ... 0 0 0]
     ...
     [0 0 0 ... 5 0 0]
     [0 0 0 ... 0 5 0]
     [0 0 0 ... 0 0 5]]

    LDA報告:
                  precision    recall  f1-score   support

               1       1.00      0.80      0.89         5
               2       1.00      1.00      1.00         5
               3       1.00      1.00      1.00         5
               4       1.00      1.00      1.00         5
               5       1.00      1.00      1.00         5
               6       1.00      1.00      1.00         5
               7       0.83      1.00      0.91         5
               8       0.83      1.00      0.91         5
               9       1.00      1.00      1.00         5
              10       1.00      0.60      0.75         5
              11       0.83      1.00      0.91         5
              12       1.00      1.00      1.00         5
              13       1.00      1.00      1.00         5
              14       1.00      0.20      0.33         5
              15       0.83      1.00      0.91         5
              16       0.83      1.00      0.91         5
              17       0.00      0.00      0.00         5
              18       1.00      1.00      1.00         5
              19       1.00      1.00      1.00         5
              20       1.00      0.80      0.89         5
              21       1.00      1.00      1.00         5
              22       1.00      1.00      1.00         5
              23       1.00      1.00      1.00         5
              24       1.00      1.00      1.00         5
              25       0.83      1.00      0.91         5
              26       1.00      0.80      0.89         5
              27       1.00      0.40      0.57         5
              28       0.43      0.60      0.50         5
              29       0.83      1.00      0.91         5
              30       1.00      1.00      1.00         5
              31       1.00      1.00      1.00         5
              32       1.00      0.60      0.75         5
              33       1.00      1.00      1.00         5
              34       1.00      1.00      1.00         5
              35       1.00      0.80      0.89         5
              36       0.50      0.80      0.62         5
              37       0.83      1.00      0.91         5
              38       0.83      1.00      0.91         5
              39       1.00      1.00      1.00         5
              40       1.00      1.00      1.00         5

        accuracy                           0.89       200
       macro avg       0.91      0.89      0.88       200
    weighted avg       0.91      0.89      0.88       200


    ================================================================

    第20維:
    
    PCA正確預測個數:173  錯誤預測個數:27 準確率:86.5%

    PCA混淆矩陣:
    [[5 0 0 ... 0 0 0]
     [0 5 0 ... 0 0 0]
     [0 0 4 ... 0 0 0]
     ...
     [0 0 0 ... 5 0 0]
     [0 0 0 ... 0 5 0]
     [0 0 0 ... 0 0 5]]

    PCA報告:
                  precision    recall  f1-score   support

               1       0.83      1.00      0.91         5
               2       0.71      1.00      0.83         5
               3       1.00      0.80      0.89         5
               4       1.00      1.00      1.00         5
               5       1.00      0.80      0.89         5
               6       1.00      1.00      1.00         5
               7       1.00      1.00      1.00         5
               8       0.83      1.00      0.91         5
               9       1.00      1.00      1.00         5
              10       1.00      0.80      0.89         5
              11       0.71      1.00      0.83         5
              12       1.00      1.00      1.00         5
              13       1.00      1.00      1.00         5
              14       0.00      0.00      0.00         5
              15       1.00      1.00      1.00         5
              16       1.00      0.80      0.89         5
              17       0.00      0.00      0.00         5
              18       0.83      1.00      0.91         5
              19       1.00      0.80      0.89         5
              20       1.00      1.00      1.00         5
              21       0.83      1.00      0.91         5
              22       1.00      1.00      1.00         5
              23       1.00      1.00      1.00         5
              24       0.83      1.00      0.91         5
              25       0.83      1.00      0.91         5
              26       1.00      0.80      0.89         5
              27       1.00      0.40      0.57         5
              28       0.38      0.60      0.46         5
              29       1.00      1.00      1.00         5
              30       1.00      1.00      1.00         5
              31       1.00      0.80      0.89         5
              32       1.00      0.60      0.75         5
              33       1.00      1.00      1.00         5
              34       1.00      1.00      1.00         5
              35       1.00      0.80      0.89         5
              36       0.38      0.60      0.46         5
              37       0.83      1.00      0.91         5
              38       1.00      1.00      1.00         5
              39       1.00      1.00      1.00         5
              40       1.00      1.00      1.00         5

        accuracy                           0.86       200
       macro avg       0.88      0.86      0.86       200
    weighted avg       0.88      0.86      0.86       200


    ------------------------------------------------------------
    LDA正確預測個數:173  錯誤預測個數:27 準確率:86.5%

    LDA混淆矩陣:
    [[5 0 0 ... 0 0 0]
     [0 5 0 ... 0 0 0]
     [0 0 5 ... 0 0 0]
     ...
     [0 0 0 ... 5 0 0]
     [0 0 0 ... 0 3 0]
     [0 0 0 ... 0 0 5]]

    LDA報告:
                  precision    recall  f1-score   support

               1       0.62      1.00      0.77         5
               2       0.83      1.00      0.91         5
               3       1.00      1.00      1.00         5
               4       1.00      1.00      1.00         5
               5       1.00      1.00      1.00         5
               6       1.00      1.00      1.00         5
               7       1.00      1.00      1.00         5
               8       0.83      1.00      0.91         5
               9       1.00      1.00      1.00         5
              10       1.00      0.80      0.89         5
              11       0.80      0.80      0.80         5
              12       1.00      1.00      1.00         5
              13       1.00      1.00      1.00         5
              14       1.00      0.20      0.33         5
              15       1.00      1.00      1.00         5
              16       1.00      0.40      0.57         5
              17       0.00      0.00      0.00         5
              18       1.00      1.00      1.00         5
              19       1.00      0.80      0.89         5
              20       1.00      1.00      1.00         5
              21       1.00      1.00      1.00         5
              22       0.83      1.00      0.91         5
              23       0.71      1.00      0.83         5
              24       1.00      1.00      1.00         5
              25       1.00      1.00      1.00         5
              26       1.00      0.80      0.89         5
              27       1.00      0.20      0.33         5
              28       0.43      0.60      0.50         5
              29       0.83      1.00      0.91         5
              30       0.71      1.00      0.83         5
              31       1.00      1.00      1.00         5
              32       1.00      0.80      0.89         5
              33       1.00      0.80      0.89         5
              34       1.00      1.00      1.00         5
              35       1.00      1.00      1.00         5
              36       0.57      0.80      0.67         5
              37       0.71      1.00      0.83         5
              38       0.83      1.00      0.91         5
              39       1.00      0.60      0.75         5
              40       1.00      1.00      1.00         5

        accuracy                           0.86       200
       macro avg       0.89      0.86      0.86       200
    weighted avg       0.89      0.86      0.86       200


    ================================================================

    第30維:

    PCA正確預測個數:177  錯誤預測個數:23 準確率:88.5%

    PCA混淆矩陣:
    [[5 0 0 ... 0 0 0]
     [0 5 0 ... 0 0 0]
     [0 0 5 ... 0 0 0]
     ...
     [0 0 0 ... 5 0 0]
     [0 0 0 ... 0 5 0]
     [0 0 0 ... 0 0 5]]

    PCA報告:
                  precision    recall  f1-score   support

               1       1.00      1.00      1.00         5
               2       0.83      1.00      0.91         5
               3       1.00      1.00      1.00         5
               4       1.00      1.00      1.00         5
               5       1.00      0.80      0.89         5
               6       1.00      1.00      1.00         5
               7       1.00      1.00      1.00         5
               8       0.83      1.00      0.91         5
               9       1.00      1.00      1.00         5
              10       1.00      0.80      0.89         5
              11       0.71      1.00      0.83         5
              12       1.00      1.00      1.00         5
              13       1.00      1.00      1.00         5
              14       1.00      0.20      0.33         5
              15       0.83      1.00      0.91         5
              16       1.00      1.00      1.00         5
              17       0.00      0.00      0.00         5
              18       0.83      1.00      0.91         5
              19       1.00      0.80      0.89         5
              20       1.00      1.00      1.00         5
              21       0.83      1.00      0.91         5
              22       1.00      1.00      1.00         5
              23       1.00      1.00      1.00         5
              24       0.83      1.00      0.91         5
              25       1.00      1.00      1.00         5
              26       1.00      0.80      0.89         5
              27       1.00      0.40      0.57         5
              28       0.43      0.60      0.50         5
              29       1.00      1.00      1.00         5
              30       1.00      1.00      1.00         5
              31       1.00      0.80      0.89         5
              32       1.00      0.60      0.75         5
              33       1.00      1.00      1.00         5
              34       1.00      1.00      1.00         5
              35       1.00      1.00      1.00         5
              36       0.38      0.60      0.46         5
              37       0.83      1.00      0.91         5
              38       1.00      1.00      1.00         5
              39       1.00      1.00      1.00         5
              40       1.00      1.00      1.00         5

        accuracy                           0.89       200
       macro avg       0.91      0.89      0.88       200
    weighted avg       0.91      0.89      0.88       200


    ------------------------------------------------------------
    LDA正確預測個數:175  錯誤預測個數:25 準確率:87.5%

    LDA混淆矩陣:
    [[4 0 0 ... 0 0 0]
     [0 5 0 ... 0 0 0]
     [0 0 5 ... 0 0 0]
     ...
     [0 0 0 ... 5 0 0]
     [0 0 0 ... 0 4 0]
     [0 0 0 ... 0 0 5]]

    LDA報告:
                  precision    recall  f1-score   support

               1       0.80      0.80      0.80         5
               2       0.83      1.00      0.91         5
               3       1.00      1.00      1.00         5
               4       1.00      1.00      1.00         5
               5       1.00      1.00      1.00         5
               6       1.00      1.00      1.00         5
               7       1.00      0.80      0.89         5
               8       1.00      1.00      1.00         5
               9       1.00      1.00      1.00         5
              10       1.00      1.00      1.00         5
              11       1.00      0.80      0.89         5
              12       1.00      1.00      1.00         5
              13       1.00      1.00      1.00         5
              14       1.00      0.20      0.33         5
              15       0.83      1.00      0.91         5
              16       1.00      0.80      0.89         5
              17       0.00      0.00      0.00         5
              18       1.00      1.00      1.00         5
              19       1.00      0.80      0.89         5
              20       1.00      0.80      0.89         5
              21       0.83      1.00      0.91         5
              22       0.83      1.00      0.91         5
              23       0.83      1.00      0.91         5
              24       1.00      1.00      1.00         5
              25       1.00      1.00      1.00         5
              26       1.00      1.00      1.00         5
              27       1.00      0.20      0.33         5
              28       0.57      0.80      0.67         5
              29       0.83      1.00      0.91         5
              30       0.71      1.00      0.83         5
              31       1.00      0.80      0.89         5
              32       1.00      0.80      0.89         5
              33       1.00      0.80      0.89         5
              34       1.00      1.00      1.00         5
              35       1.00      1.00      1.00         5
              36       0.50      0.80      0.62         5
              37       0.83      1.00      0.91         5
              38       0.83      1.00      0.91         5
              39       1.00      0.80      0.89         5
              40       1.00      1.00      1.00         5

        accuracy                           0.88       200
       macro avg       0.91      0.88      0.87       200
    weighted avg       0.91      0.88      0.87       200


    ================================================================

    第40維:

    PCA正確預測個數:178  錯誤預測個數:22 準確率:89.0%

    PCA混淆矩陣:
    [[5 0 0 ... 0 0 0]
     [0 5 0 ... 0 0 0]
     [0 0 5 ... 0 0 0]
     ...
     [0 0 0 ... 5 0 0]
     [0 0 0 ... 0 5 0]
     [0 0 0 ... 0 0 5]]

    PCA報告:
                  precision    recall  f1-score   support

               1       1.00      1.00      1.00         5
               2       1.00      1.00      1.00         5
               3       1.00      1.00      1.00         5
               4       1.00      1.00      1.00         5
               5       1.00      0.80      0.89         5
               6       1.00      1.00      1.00         5
               7       1.00      1.00      1.00         5
               8       0.83      1.00      0.91         5
               9       1.00      1.00      1.00         5
              10       1.00      0.80      0.89         5
              11       0.71      1.00      0.83         5
              12       1.00      1.00      1.00         5
              13       1.00      1.00      1.00         5
              14       1.00      0.20      0.33         5
              15       0.83      1.00      0.91         5
              16       1.00      1.00      1.00         5
              17       0.00      0.00      0.00         5
              18       0.83      1.00      0.91         5
              19       1.00      0.80      0.89         5
              20       1.00      1.00      1.00         5
              21       1.00      1.00      1.00         5
              22       1.00      1.00      1.00         5
              23       1.00      1.00      1.00         5
              24       0.83      1.00      0.91         5
              25       0.83      1.00      0.91         5
              26       1.00      0.80      0.89         5
              27       1.00      0.40      0.57         5
              28       0.43      0.60      0.50         5
              29       1.00      1.00      1.00         5
              30       1.00      1.00      1.00         5
              31       1.00      1.00      1.00         5
              32       1.00      0.80      0.89         5
              33       1.00      1.00      1.00         5
              34       1.00      1.00      1.00         5
              35       1.00      0.80      0.89         5
              36       0.38      0.60      0.46         5
              37       0.83      1.00      0.91         5
              38       1.00      1.00      1.00         5
              39       1.00      1.00      1.00         5
              40       1.00      1.00      1.00         5

        accuracy                           0.89       200
       macro avg       0.91      0.89      0.89       200
    weighted avg       0.91      0.89      0.89       200


    ================================================================

    第50維:

    PCA正確預測個數:179  錯誤預測個數:21 準確率:89.5%

    PCA混淆矩陣:
    [[5 0 0 ... 0 0 0]
     [0 5 0 ... 0 0 0]
     [0 0 5 ... 0 0 0]
     ...
     [0 0 0 ... 5 0 0]
     [0 0 0 ... 0 5 0]
     [0 0 0 ... 0 0 5]]

    PCA報告:
                  precision    recall  f1-score   support

               1       1.00      1.00      1.00         5
               2       1.00      1.00      1.00         5
               3       1.00      1.00      1.00         5
               4       1.00      1.00      1.00         5
               5       1.00      0.80      0.89         5
               6       1.00      1.00      1.00         5
               7       1.00      1.00      1.00         5
               8       0.83      1.00      0.91         5
               9       1.00      1.00      1.00         5
              10       1.00      0.80      0.89         5
              11       0.71      1.00      0.83         5
              12       1.00      1.00      1.00         5
              13       1.00      1.00      1.00         5
              14       1.00      0.20      0.33         5
              15       0.83      1.00      0.91         5
              16       1.00      1.00      1.00         5
              17       0.00      0.00      0.00         5
              18       0.83      1.00      0.91         5
              19       1.00      0.80      0.89         5
              20       1.00      1.00      1.00         5
              21       1.00      1.00      1.00         5
              22       1.00      1.00      1.00         5
              23       1.00      1.00      1.00         5
              24       0.83      1.00      0.91         5
              25       1.00      1.00      1.00         5
              26       1.00      0.80      0.89         5
              27       1.00      0.40      0.57         5
              28       0.43      0.60      0.50         5
              29       1.00      1.00      1.00         5
              30       1.00      1.00      1.00         5
              31       1.00      1.00      1.00         5
              32       1.00      0.80      0.89         5
              33       1.00      1.00      1.00         5
              34       1.00      1.00      1.00         5
              35       1.00      1.00      1.00         5
              36       0.38      0.60      0.46         5
              37       0.83      1.00      0.91         5
              38       1.00      1.00      1.00         5
              39       1.00      1.00      1.00         5
              40       1.00      1.00      1.00         5

        accuracy                           0.90       200
       macro avg       0.92      0.89      0.89       200
    weighted avg       0.92      0.90      0.89       200
        
## 五、 分析結果
分類評估(Classification Evaluation metrics)
![](https://i.imgur.com/JwKAfd4.png)
![](https://i.imgur.com/AMMROKM.jpg)

#### 準確率(Accuracy):
Accuracy = (TP+TN)/(TP+FP+FN+TN)
意味著正確預測結果佔預測總數的比例

#### 精確度(Precision):
Precision = (TP)/(TP+FP)
精確度=正確預測的個數(TP)/被預測正確的個數(TP+FP)
意味著模型預測為正之中的結果有多少是預測正確的

#### 召回率(Recall):
Recall = (TP)/(TP+FN)
召回率=正確預測的個數(TP)/預測個數(TP+FN)
意味著正確預測為正在實際為正中的比例

#### F1 Score:
![](https://i.imgur.com/7MmGvMw.png)
F-score的recall和precision之間存在著權衡的關係，可通過 β 調整更重視的部份。
但在這個實驗中我們沒有定義recall和precision的權重
因此 β 預設為 1

這邊的公式為:
F1 = 2*(精確度*召回率)/(精確度+召回率)

#### micro avg：
計算所有數據下的指標值

#### macro avg：
每個類別評估指標未加權的平均值

#### weighted avg：
加權平均，就是測試集中樣本量大的，我認爲它更重要，給他設置的權重大點。但因為在此實驗中每個樣本數量皆相同，因此可忽略不計

---

### PCA
10 dimension:
|            |  precision|    recall|  f1-score|   support|
|-|-|-|-|-
|    accuracy|           |          |      0.86|       200|
|   macro avg|       0.89|      0.86|      0.85|       200|

20 dimension:
|            |  precision|    recall|  f1-score|   support|
|------------|-----------|----------|----------|----------|
|    accuracy|           |          |      0.86|       200|
|   macro avg|       0.88|      0.86|      0.86|       200|

30 dimension:
|            |  precision|    recall|  f1-score|   support|
|------------|-----------|----------|----------|----------|
|    accuracy|           |          |      0.89|       200|
|   macro avg|       0.91|      0.89|      0.88|       200|

40 dimension:
|            |  precision|    recall|  f1-score|   support|
|------------|-----------|----------|----------|----------|
|    accuracy|           |          |      0.89|       200|
|   macro avg|       0.91|      0.89|      0.89|       200|

50 dimension:
|            |  precision|    recall|  f1-score|   support|
|------------|-----------|----------|----------|----------|
|    accuracy|           |          |      0.90|       200|
|   macro avg|       0.92|      0.89|      0.89|       200|

---

### LDA
10 dimension:
|            |  precision|    recall|  f1-score|   support|
|-|-|-|-|-|
|    accuracy|           |          |      0.89|       200|
|   macro avg|       0.91|      0.89|      0.88|       200|

20 dimension:
|            |  precision|    recall|  f1-score|   support|
|-|-|-|-|-|
|    accuracy|           |          |     0.86 |      200 |
|   macro avg|      0.89 |     0.86 |     0.86 |      200 |

30 dimension:
|            |  precision|    recall|  f1-score|   support|
|-|-|-|-|-|
|    accuracy|           |          |      0.88|       200|
|   macro avg|       0.91|      0.88|      0.87|       200|

## 六、 結論

從上面的結果可以看出PCA在越多維度時表現的最好
而LDA在10維度時分辨準確度最高(88.5%)

說明了灰度值依據不同的分群方式也能有不同的辨識結果