day 8.1 PCA人臉識別 重要屬性components_

from sklearn.datasets import fetch_lfw_people
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np

faces = fetch_lfw_people(min_faces_per_person=60)  # 每個人取出60張圖
x = faces.data  # 特徵矩陣
# print(faces.data.shape)  # (1348,2914)
# print(faces.images.shape)  # (1348, 62, 47) 矩陣中圖像的個數,每個圖像行,列
# todo:          將數據可視化
# 建畫布
# fig, axis = plt.subplots(3, 8,  # 專門創建子圖畫布的,四行五列共20個圖
#                          figsize=(8, 4)
#                          , subplot_kw={"xticks": [], "yticks": []}  # 不顯示座標軸
#                          )
# axis[0][0].imshow(faces.images[0, :, :])
# # print([*enumerate(axis.flat)])
# #  畫圖像
# for i, ax in enumerate(axis.flat):
#     # print(ax)
#     ax.imshow(faces.images[i, :, :], cmap="gray")  # 顯示灰色
# plt.show()

# todo:         模型降維
pca = PCA(150).fit(x)
v = pca.components_  # 結構應該是vkn,代表新特徵向量空間

# 要用來映射的新特徵向量空間,決定新特徵的含義
# print(v.shape)  # (150, 2914)  # k:150, n:2914
# 做一波可視化
fig, axis = plt.subplots(3, 8,  # 專門創建子圖畫布的,四行五列共20個圖
                         figsize=(8, 4)
                         , subplot_kw={"xticks": [], "yticks": []}  # 不顯示座標軸
                         )
for i, ax in enumerate(axis.flat):
    # print(ax)
    ax.imshow(v[i, :].reshape(62, 47), cmap="gray")  # 顯示灰色
plt.show()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章