首页 > 分享 > 【笔记】使用PCA对数据进行降噪(理解)

【笔记】使用PCA对数据进行降噪(理解)

使用PCA对数据进行降噪(使用手写数字实例)

(在notebook中)

加载库并制作虚拟的数据并进行绘制

import numpy as np import matplotlib.pyplot as plt X = np.empty((100,2)) X[:,0] = np.random.uniform(0. ,100. , size=100) X[:,1] = 0.75 * X[:,0] + 3. + np.random.normal(0. ,10. ,size=100) plt.scatter(X[:,0],X[:,1])

图像如下

这个数据集展现出来这样一个结果,但是实际情况是怎么样的呢,有没有可能其数据集就是一根直线,其数据的上下抖动其实是因为多种原因导致的噪音

我们使用PCA这种方法将X降维成一维,再恢复成二维的数据,并绘制图像

from sklearn.decomposition import PCA pca = PCA(n_components=1) pca.fit(X) X_reduction = pca.transform(X) X_restore = pca.inverse_transform(X_reduction) plt.scatter(X_restore[:,0],X_restore[:,1])

图像如下(此时的数据就变成了一条直线)

上面的过程可以理解成将数据的噪音去除了,当然,实际情况下,这不能说是一点噪音都没有,可以理解成,降低了维度,丢失了信息,同时也去除了部分噪音

我们使用手写识别的例子来更加直观的看待这个操作

我们使用手写数字数据集

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])

这样就有了含有100个的元素的,每个元素有64位的数据

example_digits.shape

结果如下

绘制代码:

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降噪,实例化然后取0.5,进行fit操作

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来对图像进行降噪就完成了

相关知识

【笔记】使用PCA对数据进行降噪(理解)
使用pca的降维方法对sklearn官方iris(鸢尾花)数据集进行降维,并绘图显示
基于PCA与LDA的数据降维实践
鸢尾花数据可视化,PCA降到两维后,对数据标准化、归一化
计算方法实验6:对鸢尾花数据集进行主成分分析(PCA)并可视化
基于PCA的数据降维(鸢尾花(iris)数据集)
鸢尾花数据集上的主成分分析 (PCA) — scikit
Python实现PCA算法
利用PCA(主成分分析法)实现鸢尾花数据集的分类
鸢尾花数据集分析

网址: 【笔记】使用PCA对数据进行降噪(理解) https://m.huajiangbk.com/newsview1657791.html

所属分类:花卉
上一篇: 小型气象站在线分析
下一篇: 基于STM32单片机的智能加湿器