sklearn机器学习之降维(人脸图片数据集)

1.导入相应包

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

2.准备数据集

本次我们使用的数据集是sklearn库中自带的人脸图片数据集,包括1348张长宽分别为62、 47的人脸图片,该数据集有data和image两种属性,image按照图片取出,为三维(1348, 62, 47),data属性为将长宽展平为一维(1348, 2914),2914 = 62×47。

faces = fetch_lfw_people(min_faces_per_person=60)
#取出我们需要用到的数据
X = faces.data
faces.images.shape
faces.data.shape

3.绘制原图像(这里只画出20张,想画更多改参数即可)

#创建画布和子图对象
#横纵长度为4和5的画布
fig, axes = plt.subplots(4, 5
                       , figsize=(8, 4)
                       , subplot_kw = {"xticks":[],"yticks":[]} #不要显示坐标轴
                       )
#这里采用enumerate函数对axes进行变化绘制(这里是将二位数据拉成一维)
for i, ax in enumerate(axes.flat):
	#显示图片
    ax.imshow(faces.images[i, :, :], cmap='gray')
plt.savefig(r"C:\Users\86377\Desktop\2.png")

绘制出20张原图片如图所示:
在这里插入图片描述

4.将数据从2914降至150维

#原本有2900维,我们现在来降到150维
pca = PCA(150).fit(X)
V = pca.components_

这里我讲一下我的理解:原始数据为1348张长宽为62×47=2914,特征为2914,我们使用pca将特征降至2914维,所以V’为150×2914维,这样矩阵所做的线性空间变换才会将特征维数降至150维,绘制特征空间,150个特征就有150种特征空间,所以我们可以将这150种特征空间绘制出来。

5.绘制150个特征空间

fig, axes = plt.subplots(10, 15, figsize=(20, 8), subplot_kw={"xticks": [], "yticks": []})
for i, ax in enumerate(axes.flat):
    ax.imshow(V[i, :].reshape(62, 47), cmap="gray")

绘制出的图片如下:
在这里插入图片描述
只显示20个我们仔细看:
在这里插入图片描述
这里我们可以看到后面越来越不显示出人脸特征,这也验证了保留有效信息的可行性。

6.利用接口将降维后的信息还原

#降维后的数据
X_dr = pca.transform(X)
#还原的数据
X_inverse = pca.inverse_transform(X_dr)
#可视化
fig, axes = plt.subplots(2, 10, subplot_kw={'xticks': [], 'yticks': []})
for i in range(10):
    axes[0, i].imshow(X[i, :].reshape(62, 47), cmap='binary_r')
    axes[1, i].imshow(X_inverse[i, :].reshape(62, 47), cmap='binary_r')
plt.savefig(r"C:\Users\86377\Desktop\4.png")

原始和还原的图像对比如下:
在这里插入图片描述
虽然两者差别不大,但是原始图像还是更加清晰,这说明还原并不是100%。

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值