降维算法PCA的应用----高维数据的可视化

Posted iostreamzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了降维算法PCA的应用----高维数据的可视化相关的知识,希望对你有一定的参考价值。

序言

当我们拿到一堆数据的时候,几乎不可能通过我们的肉眼分辨出数据的分布情况,这时候就想要通过图展示数据的分布,但是现实中数据往往维度很高,而我们人类能看到的最高维度就三维,这时我们就可以通过降维算法PCA将维度降低到三位之下,便于我们观察数据的分布。注意点这里讲的方式只适用于分类型标签数据的可视化

废话不多说看代码

本次使用的数据是sklearn自带的鸢尾花数据集

导入相关模块

from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

数据提取

# 提取特征和标签
iris = load_iris()
X = iris['data']
y = iris['target']

降维

# 实例化PCA,并实现数据降维
pca_2 = PCA(n_components=2)
X_dim2 = pca_2.fit_transform(X)

降维后数据信息展示

# 通过explained_variance_s属性查看降维后的每个特征的可解释性方差的大小
# 方差越大带有的有效信息越大
pca_2.explained_variance_
# array([4.22824171, 0.24267075])
# 通过explained_variance_ratio_属性查看降维后的每个特征所占信息量占原始信息量的比例
pca_2.explained_variance_ratio_
# array([0.92461872, 0.05306648])
# 查看降维后的所有特征信息量占原始数据的比例
pca_2.explained_variance_ratio_.sum()
# 0.9776852063187949

97%的展现率,可以说画出来的图基本接近原始数据的分布的

新的特征矩阵

在这里插入图片描述

可视化

# 可视化
# 将第一个特征作为x,第二个特征作为y

color = ['red', 'green', 'blue']

# 取出标签中的所有类别
label = np.unique(y) # [0, 1, 2]

for i in label :
	# 这里采用的是bool索引
    x = X_dim2[y==i, 0]
    y1 = X_dim2[y==i, 1]
    plt.scatter(x, y1, c=color[i])

plt.show()

在这里插入图片描述
这就是大名鼎鼎的鸢尾花数据集的分布了。可能有一点点的误差,毕竟新的特征举证只能表现原数据97%的信息。但是数据大致的分布情况是没错的

关于X_dim2[y==i, 0]的解释

这里能这么做的原因在于。我没有对我的数据进行行方向上的变化,也就是说没有交换过行的位置。
那么最终的数据与标签y依然是一一对应的关系。通过这个索引获得的数据,依然符合原数据的分布。

# 以y == 0 为例
y == 0
'''
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
'''
# 遍历y,只要遇到为0的情况,相应位置则为true。
# 最终返回一个bool矩阵
X_dim2[y==0, 0]
# 通过y==0返回的bool索引,取出为true对应的行,在取第一列

总结

降维算法PCA的真的很强大。当不知道数据分布的情况下,大可以通过降维画出数据分布,然后再选择比较适合的模型来进行数据的预测。


欢迎在评论区和我共同讨论

以上是关于降维算法PCA的应用----高维数据的可视化的主要内容,如果未能解决你的问题,请参考以下文章

R语言高维数据的主成分pca t-SNE算法降维与可视化分析案例报告

吴恩达机器学习-9-降维PCA

sklearn中的降维算法PCA和SVD

高维数据 |R语言数据可视化之t-SNE

机器学习丨PCA降维的经典算法

常用降维方法之PCA 和 LDA