我正在尝试使用numpy和scikit learning为PCA实现python中人脸识别的特征脸算法,然后计算PCA生成的展开矩阵之间的欧式距离。
问题是我在同一个人的面孔之间和不同的人之间的距离都不很近:
import numpy as np
from sklearn.decomposition import PCA
from PIL import Image
person1_1 = Image.open('person1/1.jpg').convert('LA')
person1_2 = Image.open('person1/2.jpg').convert('LA')
person2_1 = Image.open('person2/1.jpg').convert('LA')
person2_2 = Image.open('person2/2.jpg').convert('LA')
person1_1 = np.asarray(person1_1)[:,:,0]
person1_2 = np.asarray(person1_2)[:,:,0]
person2_1 = np.asarray(person2_1)[:,:,0]
person2_2 = np.asarray(person2_2)[:,:,0]
pca = PCA(n_components=100)
person1_1_pca = pca.fit_transform(person1_1)
person1_2_pca = pca.fit_transform(person1_2)
person2_1_pca = pca.fit_transform(person2_1)
person2_1_pca = pca.fit_transform(person2_2)
print("Same person: {}".format(np.linalg.norm(np.ravel(person1_1_pca)-np.ravel(person1_2_pca))))
print("Different person: {}".format(np.linalg.norm(np.ravel(person1_1_pca)-np.ravel(person2_1_pca))))
代码产生:
Same person: 9293.360941013
Different person: 10218.849581657663
有时候我对同一个人的距离要比不同人的距离大。
问题出在哪里