from sklearn.datasets import load_digits # 一个蛮好的系统自带手写数据集 from sklearn.decomposition import PCA import matplotlib.pyplot as plt import numpy as np digits = load_digits() # print(digits.data) # print(set(digits.target.tolist())) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} # print(digits.images.shape) # (1797, 8, 8) def plot_digits(data): # data的结构必须是(m,n),并且n要能被分为(8,8)这样的结构 fig, axes = plt.subplots(4, 10, figsize=(10, 4), subplot_kw={"xticks": [], "yticks": []}) for i, ax in enumerate(axes.flat): ax.imshow(data[i].reshape(8, 8), cmap="binary") # plot_digits(digits.data) # plt.show() # todo: 数据还蛮好的,所以要手动加点噪音进去 # 在指定的数据集中,随机抽取服从正态分布的数据 # 两个参数,分别是制定的数据集,和抽取出来的正态分布的方差 rng = np.random.RandomState(42) #### noisy = np.random.normal(digits.data,2) noisy = rng.normal(digits.data,2) # plot_digits(noisy) # plt.show() # todo: 实现降噪 # 1. 降维 pca=PCA(0.5,svd_solver="full").fit(noisy) X_dr = pca.transform(noisy) # print(X_dr.shape) # 2. 转回来 without_noise = pca.inverse_transform(X_dr) # print(without_noise.shape) # 3. 降噪 plot_digits(without_noise) plt.show()
day 8.3 PCA 降噪
最新推荐文章于 2022-11-20 15:36:33 发布