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()
day 8.1 PCA人臉識別 重要屬性components_
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.