「这是我参与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主要是关注数据的局部结构。
PCA降维(主成分分析)
代码实现
使用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)
结果如下: