【笔记】使用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问题)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!