sklearn库PCA函数进行数字图片降维

1.PCA简介

    PCA全称是Principal component analysis,中文名是主成分分析。是对数据进行降维处理的一种常用方法。

    PCA的原理可以理解为寻找超平面对样本进行表达,从而使得属性自身的方差尽可能大,而属性之间的协方差尽可能小。具体的数学原理可以去参考这位大神的文章:https://zhuanlan.zhihu.com/p/21580949

    这篇文章从数学的角度出发,解释了矩阵相乘的意义等对于理解PCA原理很重要的概念。比西瓜书的解释更通俗易懂。

 

2.sklearn库PCA函数使用

     本次使用的数字图片有0, 1, 2, 3, 4五种不同数字。每个图片由28×28=764个像素点组成,每个像素点的值在0-255之间。因此我们的数据集一共有764个属性。这不能说是一个相当大的数字,但是如果想观察数据或者处理数据,这个维度数也是不好处理的。因此我们对其进行降维。

      可以通过两种不同的方法获取降维后的数据。其中pca.components_代表数据集的特征向量,而pca.explained_variance_即特征值。

#读取dataset
df = pd.read_csv('DataB.csv',index_col=0)
output = df['gnd']
df = df.drop('gnd',axis=1)
df = df-df.mean()

#对dataset进行降维
#比如我们想将数据将至二维,可以进行如下操作。

#方法1:定义PCA函数时不定义n_components,计算时通过特征向量进行计算
from sklearn.decomposition import PCA

pca = PCA()
pca.fit(df.values)
eigenvector = pca.components_
1_2_component = pd.DataFrame(np.dot(df.values,eigenvector[0:2].T))


#方法2:定义PCA函数时定义n_components,然后直接转换。

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
1_2_component = pca.fit_transform(df.values)

       我们利用降至二维之后的数据进行作图从而观察数据。

import seaborn as sns

pca_1_2 = pd.DataFrame(np.dot(df.values,eigenvector[0:2].T))
pca_1_2['categories'] = output.values

sns.set(rc={'figure.figsize':(11,8)})
ax = sns.scatterplot(data=pca_1_2,x=0,y=1,hue='categories',s=40,palette={0:'r',1:'b',2:'g',3:'purple',4:'orange'})

     可以看到不同数字图片降维后的数据分布是有规律的。数字1, 2, 4的数据互相并没有太多的重合,而数字2和数字3的数据因为2和3本身长得类似,因为图片数据在一定程度上是重合的,因此点的分布也会重合。

     降维之后的数据保留有原先数据的许多信息,让我们能够通过作图去了解数据本身的信息。相当实用。

      如果想利用降维后的数据进行图片重构的话,利用以下代码即可。

pca_n = PCA(n_components=2)
data_n = pca_n.fit_transform(df.values)
reconstruct = np.dot(data_n,eigenvector[:2])

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值