吴恩达-机器学习课后题07-PCA-图像降维

1、题目

题目:使用PCA的方法,对图像进行降维处理

2、解题

1、导入数据

mat = sio.loadmat(path)
print(mat.keys())
X = mat['X']

2、显示数据内容
利用前面手写数字识别时定义的显示图片的方法,显示前100张图片

def plot_100_image():
    fig,ax = plt.subplots(ncols=10,nrows=10,figsize=(10,10))
    for i in range(10):
        for j in range(10):
            ax[i,j].imshow(X[10*i+j].reshape(32,32).T,cmap='Greys_r')
            ax[i,j].set_xticks([])
            ax[i,j].set_yticks([])
    plt.show()
plot_100_image()

结果:
在这里插入图片描述
3、求均值

means = np.mean(X,axis=0)
X_demean = X-means
C = X_demean.T@X_demean
U,S,V = np.linalg.svd(C)

使用svd奇异值分解的方法进行分解

4、降维:

U1 = U[:,:36]
X_reduction = X_demean@U1
print(X_reduction.shape)
print(U1.shape)

4、对降维之后的图像进行6*6显示

def plot_100_image(images):
    fig,ax = plt.subplots(ncols=10,nrows=10,figsize=(10,10))
    for i in range(10):
        for j in range(10):
            ax[i,j].imshow(images[10*i+j].reshape(36,36).T,cmap='Greys_r')
            ax[i,j].set_xticks([])
            ax[i,j].set_yticks([])
    plt.show()

在这里插入图片描述
不忍直视
参考上一节,要转换成二维的才能显示在二维坐标上,此处是要转制成1024,才能使用plot显示到32*32出来

5、进行重构

X_recover = X_reduction@U1.T+means #参考上一节,要转换成二维的才能显示在二维坐标上,此处是要转制成1024,才能使用plot显示出来
plot_100_image(X_recover)

此处理解:
求出来的U是10241024的方阵,取前36列与X_demean进行@使得X进行降维,成了500036,反之,要使其恢复成50001024,需要500036@26*1024,即X_reduction@U1.T 然后还需要加上均值恢复

题外话,尝试了一下没有恢复均值的情况,挺好笑的😺,完全错位
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值