使用PCA对手写数据集MNIST进行降维降噪

 

目录

一、 MNIST训练

二、手写识别数据集PCA降噪


一、 MNIST训练

 


 

代码示例:

import numpy as np
from sklearn.datasets import fetch_openml

#导入数据
mnist = fetch_openml('mnist_784')

X,y = mnist['data'],mnist['target']

X_train = np.array(X[:60000],dtype=float)  #60000个样本,784个维度
y_train = np.array(X[:60000],dtype=float)
X_test = np.array(X[:60000],dtype=float)
y_test = np.array(X[:60000],dtype=float)

# KNN识别
from sklearn.neighbors import KNeighborsClassifier

knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train,y_train)

# %time knn_clf.score(X_test, y_test)

# PCA降维
from sklearn.decomposition import PCA 

pca = PCA(0.90)
pca.fit(X_train)
X_train_reduction = pca.transform(X_train)
X_test_reduction = pca.transform(X_test)

knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train_reduction, y_train)

%time knn_clf.score(X_test_reduction, y_test)

 

二、手写识别数据集PCA降噪


代码示例:

from sklearn import datasets

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

#图形可视化
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)

components = pca.transform(example_digits)  #降维
filtered_digits = pca.inverse_transform(components)  #低维到高维的恢复,损失的噪音没有了
plot_digits(filtered_digits)

运行结果:

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PCA(Principal Component Analysis)是一种常用的降维方法,它可以将高维的数据转换成低维的数据,同时保留原始数据的主要特征。 在对MNIST数据集进行降维时,我们首先需要对数据进行预处理,例如对每个像素值进行标准化处理,使其均值为0,方差为1。然后,我们将数据输入PCA模型中。PCA模型会计算出一组特征向量和对应的特征值,特征向量表示数据中的主要方向,特征值表示数据在对应特征向量上的重要程度。 我们可以根据特征值的大小来选择保留多少个主要特征向量。通常,我们选择前K个特征向量,其中K是我们预先设定的维度。这样,我们可以将原始的高维数据转换成K维的数据,实现数据的降维。 通过对MNIST数据集进行PCA降维,可以达到以下几个目的: 1. 减少数据的维度,降低计算和存储的复杂性。原始的MNIST数据集包含784维的特征(每个样本是28x28的像素矩阵),而PCA可以将数据降到更低维度,例如50维,从而减少需要处理的特征数量。 2. 保留了数据的主要特征。通过选择保留较大特征值对应的特征向量,PCA可以保留数据中最重要的信息,从而在降维的同时尽量减少信息损失。 3. 可视化数据。通过降维后的数据,我们可以更容易地对数据进行可视化,例如绘制散点图、热力图等,从而更好地理解数据的分布和结构。 需要注意的是,降维后的数据可能损失一部分细节信息,因此降维的合理性需要根据具体问题进行评估。同时,在PCA的应用中,我们还可以通过调整维度数量、选择其他降维方法(如LDA、t-SNE等)来进行对比和分析,以获得更好的降维效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值