机器学习——PCA降维(机器学习实战)

669 阅读3分钟

「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

降维概述(为什么要降维)

维数灾难(Curse of Dimensionality):通常是指在涉及到向量的计算的问题 中,随着维数的增加,计算量呈指数倍增长的一种现象。 在很多机器学习问题中,训练集中的每条数据经常伴随着上千、甚至上万 个特征。要处理这所有的特征的话,不仅会让训练非常缓慢,还会极大增 加搜寻良好解决方案的困难。这个问题就是我们常说的维数灾难。

维数灾难涉及数字分析、抽样、组合、机器学习、数据挖掘和数据库等诸 多领域。在机器学习的建模过程中,通常指的是随着特征数量的增多,计 算量会变得很大,如特征达到上亿维的话,在进行计算的时候是算不出来 的。有的时候,维度太大也会导致机器学习性能的下降,并不是特征维度 越大越好,模型的性能会随着特征的增加先上升后下降。

高维数据增加了运算的难度

高维使得学习算法的泛化能力变弱(例如,在最近邻分类器中, 样本复杂度随着维度成指数增长),维度越高,算法的搜索难度 和成本就越大。

降维能够增加数据的可读性,利于发掘数据的有意义的结构

如何降维

降维(Dimensionality Reduction)是将训练数据中的样本(实例)从高 维空间转换到低维空间,该过程与信息论中有损压缩概念密切相 关。同时要明白的,不存在完全无损的降维。 有很多种算法可以完成对原始数据的降维,在这些方法中,降维 是通过对原始数据的线性变换实现的。

降维的作用

1.减少冗余特征,降低数据维度

假设我们有两个特征: 𝑥1:长度用厘米表示的身高;𝑥2:是用英寸表示的身高。 这两个分开的特征𝑥1和𝑥2,实际上表示的内容相同,这样其实可 以减少数据到一维,只有一个特征表示身高就够了。 很多特征具有线性关系,具有线性关系的特征很多都是冗余的特 征,去掉冗余特征对机器学习的计算结果不会有影响。

2、便于数据可视化

t-SNE(TSNE)将数据点之间的相似度转换为概率。原始空间中的相似度由 高斯联合概率表示,嵌入空间的相似度由“学生t分布”表示。 虽然Isomap,LLE和variants等数据降维和可视化方法,更适合展开单个连续的低维的manifold。但如果要准确的可视化样本间的相似度关系,如对于下图所示的S曲线(不同颜色的图像表示不同类别的数据),t-SNE表现更好 。因为t-SNE主要是关注数据的局部结构。

image.png

PCA降维(主成分分析)

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

代码实现

使用sklearn库中的自带的PCA算法实现。

from sklearn.decomposition import PCA
import numpy as np
import pandas as pd
X = np.array([[-1, -2], [-1, 0], [0, 0], [2, 1], [0, 1]])
pca = PCA(n_components=1)
newX = pca.fit_transform(X)
print(newX)

结果如下:

image.png