用PCA对带噪声的手写数字进行降维处理

用PCA对带噪声的手写数字进行降维处理

引入手写数字数据集,代码如下:

from sklearn import datasets
digits = datasets.load_digits()
X = digits.data
y = digits.target

制作一个含噪声的数据集

noisy_digits = X + np.random.normal(0, 4, size=X.shape)

从样本中取出100个digits,称其为example_digits。
初始的时候,在noisy_digits中y=0中取十个,然后进行循环从一到十,每一个都再从noisy_digits中取出y=num的十个,将这些样本和原来的样本垒在一起

example_digits = noisy_digits[y == 0, :][:10]
for num in range(1, 10):
    X_num = noisy_digits[y == num, :][:10]
    example_digits = np.vstack([example_digits, X_num])

print(example_digits.shape)
得到的结果是:(100,64),代表着example_digits含有100个的元素的,每个元素有64位的数据。

完整代码显示

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


digits = datasets.load_digits()
X = digits.data
y = digits.target

noisy_digits = X + np.random.normal(0, 4, size=X.shape)

example_digits = noisy_digits[y == 0, :][:10]
for num in range(1, 10):
    X_num = noisy_digits[y == num, :][:10]
    example_digits = np.vstack([example_digits, X_num])
print(example_digits.shape)  # (100,64)含有100个的元素的,每个元素有64位的数据

def plot_digits(data):
    fig, axes = plt.subplots(10, 10, figsize=(10, 10),
                             subplot_kw={'xticks': [], 'yticks': []},
                             gridspec_kw=dict(hspace=0.1, wspace=0.1))
    for i, ax in enumerate(axes.flat):
        ax.imshow(data[i].reshape(8, 8),
                  cmap='binary', interpolation='nearest',
                  clim=(0, 16))
    plt.show()

plot_digits(example_digits)
# 用PCA进行降维
pca = PCA(0.5)
pca.fit(noisy_digits)
pca.n_components_
components = pca.transform(example_digits)
# 对低维返回高维,再进行绘制
filtered_digits = pca.inverse_transform(components)
plot_digits(filtered_digits)

显示的原始图像如下:
在这里插入图片描述
经过PCA降噪处理后的图像显示如下:
在这里插入图片描述

参考 https://www.cnblogs.com/jokingremarks/p/14302649.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dream_Bri

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

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

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

打赏作者

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

抵扣说明:

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

余额充值