降维是数据挖掘流程中,一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以节省大量的时间成本。另外,除了让算法运行更快。降维还有一种场景,就是将数据可视化,根据数据分布情况进而选择合适算法。

降维算法主要有:主成分分析(PCA)、奇异值分解(SVD)、因子分析(FA)、独立成分分析(ICA)。本篇文章主要介绍利用 PCA 进行可视化。

在 sklearn 库,PCA 在 sklearn.decomposition.PCA 类:

class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)

如果只是对数据进行可视化,其他参数可以忽略,按照默认参数值即可,主要调整 n_components 参数。 n_components 是我们降维后需要的维度,即降维后需要保留的特征数量,降维流程中需要确认的 k 值, 一般输入[0, min(X.shape)]范围中的整数。这是一个需要我们人为设定的参数,数字设定会影响到模型表现。如果留下的特征太多,就达不到降维效果,如果留下特征太少,那新特征向量可能无法容纳原始数据集中的大部分信息。但是,在进行数据可视化观察数据分布时。因为数据往往都是二维状态,即 n_components 取值为 2。

案例说明

1
2
3
4
5
6
7
8
9
10
11
12
#导入相关库
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA

#获取skearn库鸢尾花数据集,鸢尾花四维数组
iris = load_iris()
y = iris.target
X = iris.data

#查看原始数据
X[0:5]
1
2
3
4
5
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2]])
1
2
3
4
5
6
7
#调用PCA,n_components=2
pca = PCA(n_components=2)
pca = pca.fit(X)
X_dr = pca.transform(X)

#查看降维后的数据
X_dr[0:5]
1
2
3
4
5
array([[-2.68412563,  0.31939725],
[-2.71414169, -0.17700123],
[-2.88899057, -0.14494943],
[-2.74534286, -0.31829898],
[-2.72871654, 0.32675451]])
1
2
3
4
5
6
7
8
9
10
11
#鸢尾花三种类型可视化
colors = ['red', 'black', 'orange']
iris.target_names
plt.figure()
for i in [0, 1, 2]:
plt.scatter(X_dr[y == i, 0] ,X_dr[y == i, 1]
,alpha=.7
,c=colors[i] ,label=iris.target_names[i])
plt.legend()
plt.title('PCA of IRIS dataset')
plt.show()

image.png

如图,降维后进行可视化,可以清楚看到鸢尾花数据集 3 种类型分布,观察分布可以得知,鸢尾花数据集使用聚类算法,应该会取得比较好的效果。