人脸识别——PCA降维

人脸识别——PCA降维

数据

本实验采集82名同学每人三张共计246张图片,两张用于训练,一张用于测试

PCA

path1 = "E:\\code\\jupyter\\facedata" #文件夹目录
files1 = os.listdir(path1) #得到文件夹下的所有文件名称
labels = []
for file in files1: #遍历文件夹
    labels.append(file) #每个文件的文本存到list中

j = 0
dataname = []
for i in range(0, 82):
    path2 = path1 + '\\' + labels[i] + '\\'
    files2 = os.listdir(path2)
    for file in files2:#获取每个人的图片
        path3 = path2 + file
        dataname.append(path3)#dataname是所有图片的路径
        j = j + 1
images = []
labels = []
for index,face in enumerate(dataname):
    image = cv2.imread(face, cv2.IMREAD_GRAYSCALE)
    image = cv2.resize(image, (128, 128))#image是一个128*128的矩阵
    images.append(image)
    labels.append(int(index))
    
for i in range(246):
    labels[i] = int(labels[i]/3)#将图像每三个分为一组
# 图像数据转换特征矩阵
image_data = []
for image in images:
    data = image.flatten()
    image_data.append(data)
print(image_data[0].shape)
# 转换为numpy数组
X = np.array(image_data)
y = np.array(labels)
print(type(X))
print(X.shape)
# 画出特征矩阵
data = pd.DataFrame(X)
data
#划分训练集和测试集
x1 = []
y1 = []
x2 = []
y2 = []
for i in range(246):
    if i%3 != 0:
        x1.append(X[i])
        y1.append(y[i])
    else:
        x2.append(X[i])
        y2.append(y[i])
        
x_train = np.array(x1)
y_train = np.array(y1)
x_test = np.array(x2)
y_test = np.array(y2)
print(x_train.shape, y_train.shape, x_test.shape, y_test.shape, sep = '\n')
#164用于训练,82用于测试

在这里插入图片描述

model+predicted

# 画出特征个数和所携带信息数的曲线图
explained_variance_ratio = []
for i in range(1,151): 
    pca = PCA(n_components=i).fit(X)
    explained_variance_ratio.append(pca.explained_variance_ratio_.sum())
plt.plot(range(1,151),explained_variance_ratio)
plt.show()

在这里插入图片描述

# 选择维度100,训练PCA模型
pca = PCA(n_components = 100)
pca.fit(X)
#返回测试集和训练集降维后的数据集
x_train_pca = pca.transform(x_train)
x_test_pca = pca.transform(x_test)

print(x_train_pca.shape)
print(x_test_pca.shape)
#数据降维到100

在这里插入图片描述

#使用svc模型训练预测
svc = SVC(C = 2, kernel='linear', class_weight='balanced')
svc.fit(x_train_pca, y_train)
#svc_pre = svc.predict(x_test)
svc.score(x_test_pca, y_test)
#准确率0.67

在这里插入图片描述

#使用“特征脸”模型
model=cv2.face.EigenFaceRecognizer_create()
model.train(x_train_pca, y_train)
label = []
confidence = []
for i in range(82):
    j, k = model.predict(x_test_pca[i])
    label.append(j)
    confidence.append(k)
print('pca', precision_score(y_test, label, average='micro'))
#准确率0.65

在这里插入图片描述
本实验主要目的是学习PCA的使用,最终的结果受使用数据的影响,不具参考价值

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G-Jarvey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值