根据菜菜的课程进行整理,方便记忆理解
代码位置如下:
“维度”
对于数组和Series来说,维度就是功能shape返回的结果,shape中返回了几个数字,就是几维。
索引以外的数据,不分行列的叫一维(此时shape返回唯一的维度上的数据个数),有行列之分叫二维(shape返回行x列),也称为表。一张表最多二维,复数的表构成了更高的维度。当一个数组中存在2张3行4列的表时,shape返回的是(更高维,行,列)。当数组中存在2组2张3行4列的表时,数据就是4维,shape返回(2,2,3,4)。
数组中的每一张表,都可以是一个特征矩阵或一个DataFrame,这些结构永远只有一张表,所以一定有行列,其中行是样本,列是特征。针对每一张表,维度指的是样本的数量或特征的数量,一般无特别说明,指的都是特征的数量。除了索引之外,一个特征是一维,两个特征是二维,n个特征是n维。
- 维度:
- 广义:数据的shape返回回来的数据,一维是列数据;二维是表数据,三维是立方体数据...
- 狭义:就是样本和特征构成的表中,我们特征的数目
对图像来说,维度就是图像中特征向量的数量。特征向量可以理解为是坐标轴,一个特征向量定义一条直线,是一维,两个相互垂直的特征向量定义一个平面,即一个直角坐标系,就是二维,三个相互垂直的特征向量定义一个空间,即一个立体直角坐标系,就是三维。三个以上的特征向量相互垂直,定义人眼无法看见,也无法想象的高维空间。
- 降维算法中的”降维“
- 本质:指的是降低特征矩阵中特征的数量。
- 目的:让算法运算更快,效果更好,
- 另一种需求:数据可视化。
- 从上面的图我们其实可以看得出,图像和特征矩阵的维度是可以相互对应的,即一个特征对应一个特征向量,对应一条坐标轴。所以,三维及以下的特征矩阵,是可以被可视化的,这可以帮助我们很快地理解数据的分布,而三维以上特征矩阵的则不能被可视化,数据的性质也就比较难理解。
sklearn中的降维算法
sklearn中降维算法都被包括在模块decomposition中,这个模块本质是一个矩阵分解模块。矩阵分解可以用在降维,深度学习,聚类分析,数据预处理,低纬度特征学习,推荐系统,大数据分析等领域。
SVD和主成分分析PCA都属于矩阵分解算法中的入门算法,都是通过分解特征矩阵来进行降维。用最简单的方式为大家呈现降维算法的原理,但这注定意味着大家无法看到这个算法的全貌,在机器学习中逃避数学是邪道,所以更多原理大家自己去阅读。
PCA与SVD
-
降维,我们会减少特征的数量,这意味着删除数据,数据量变少则表示模型可以获取的信息会变少,模型的表现可能会因此受影响
-
在高维数据中,必然有一些特征是不带有有效的信息的(比如噪音),或者有一些特征带有的信息和其他一些特征是重复的(比如一些特征可能会线性相关)。
-
我们希望能够找出一种办法来帮助我们衡量特征上所带的信息量,让我们在降维的过程中,能够即
减少特征的数量,又保留大部分有效信息——将那些带有重复信息的特征合并,并删除那些带无效信息的特征等等——逐渐创造出能够代表原特征矩阵大部分信息的,特征更少的,新特征矩阵。
我们提到过一种重要的特征选择方法:方差过滤。如果一个特征的方差很小,则意味着这个特征上很可能有大量取值都相同(比如 90% 都是1,只有 10% 是0,甚至 100% 是1),那这一个特征的取值对样本而言就没有区分度,这种特征就不带有有效信息。从方差的这种应用就可以推断出,如果一个特征的方差很大,则说明这个特征上带有大量的信息。因此,在降维中,PCA使用的信息量衡量指标,就是样本方差,又称可解释性方差,方差越大,特征所带的信息量越多。
Var代表一个特征的方差,n代表样本量,xi代表一个特征中的每个样本取值,xhat代表这一列样本的均值。
降维的实现
class sklearn.decomposition.PCA (
n_components=None,copy=True, whiten=False,svd_solver=’auto’, tol=0.0,iterated_power=’auto’,random_state=None)
PCA作为矩阵分解算法的核心算法,其实没有太多参数,但不幸的是每个参数的意义和运用都很难,因为几乎每个参数都涉及到高深的数学原理。下面是二维数据的降维过程展示。
我们现在有一组简单的数据,有特征x1和x2,三个样本数据的坐标点分别为(1,1),(2,2),(3,3)。我们可以让x1和x2分别作为两个特征向量,很轻松地用一个二维平面来描述这组数据。这组数据现在每个特征的均值都为2,方差则等于:
每个特征的数据一模一样,因此方差也都为1,数据的方差总和是2。
- 目标:
- 只用一个特征向量来描述这组数据,即将二维数据降为一维数据,并且尽可能地保留信息量,即让数据的总方差尽量靠近2。
- 变化过程:
- 于是,我们将原本的直角坐标系逆时针旋转45°,形成了新的特征向量x1* 和x2* 组成的新平面,在这个新平面中,三个样本数据的坐标点可以表示为(,0),(,0) ,(,0) 。可以注意到,x2* 上的数值此时都变成了0,因此x2* 明显不带有任何有效信息了(此时x2* 的方差也为0了)。此时,x1*特征上的数据均值是,而方差则可表示成:
- 结果:
- x1* 上的数据均值为0,方差也为0。
- 此时,我们根据信息含量的排序,取信息含量最大的一个特征,因为我们想要的是一维数据。所以我们可以将x2* 删除,同时也删除图中的x2* 特征向量,剩下的x1* 就代表了曾经需要两个特征来代表的三个样本点。
通过旋转原有特征向量组成的坐标轴来找到新特征向量和新坐标平面,我们将三个样本点的信息压缩到了一条直线上,实现了二维变一维,并且尽量保留原始数据的信息。一个成功的降维,就实现了。
不难注意到,在这个降维过程中,有几个重要的步骤:
| 过程 | 二维特征矩阵 | n维特征矩阵 |
|---|---|---|
| 1 | 输入原数据,结构为 (3,2) 找出原本的2个特征对应的直角坐标系,本质 是找出这2个特征构成的2维平面 | 输入原数据,结构为 (m,n) 找出原本的n个特征向量构成的n维空间V |
| 2 | 决定降维后的特征数量:1 | 决定降维后的特征数量:k |
| 3 | 旋转,找出一个新坐标系 本质是找出2个新的特征向量,以及它们构成的新2维平面 新特征向量让数据能够被压缩到少数特征上, 并且总信息量不损失太多 | 通过某种变化,找出n个新的特征向量,以及它们 构成的新n维空间V |
| 4 | 找出数据点在新坐标系上,2个新坐标轴上的 坐标 | 找出原始数据在新特征空间V中的n个新特征向量上 对应的值,即“将数据映射到新空间中” |
| 5 | 选取第1个方差最大的特征向量,删掉没有被 选中的特征,成功将2维平面降为1维 | 选取前k个信息量最大的特征,删掉没有被选中的 特征,成功将n维空间V降为k维 |
在步骤3当中,我们用来找出n个新特征向量,让数据能够被压缩到少数特征上并且总信息量不损失太多的技术就是矩阵分解。
-
PCA和SVD是两种不同的降维算法,但他们都遵从上面的过程来实现降维,只是两种算法中矩阵分解的方法不同,信息量的衡量指标不同罢了。
- PCA使用方差作为信息量的衡量指标,并且特征值分解来找出空间V。降维时,它会通过一系列数学的神秘操作(比如说,产生协方差矩阵)将特征矩阵X分解为以下三个矩阵,其中和是辅助的矩阵、,Σ是一个对角矩阵(即除了对角线上有值,其他位置都是0的矩阵),其对角线上的元素就是方差。降维完成之后,PCA找到的每个新特征向量就叫做“主成分”,而被丢弃的特征向量被认为信息量很少,这些信息很可能就是噪音。
- 而SVD使用奇异值分解来找出空间V,其中Σ也是一个对角矩阵,不过它对角线上的元素是奇异值,这也是SVD中用来衡量特征上的信息量的指标。U和分别是左奇异矩阵和右奇异矩阵,也都是辅助矩阵。
-
无论是PCA和SVD都需要遍历所有的特征和样本来计算信息量指标。
-
并且在矩阵分解的过程之中,会产生比原来的特征矩阵更大的矩阵,比如原数据的结构是(m,n),在矩阵分解中为了找出最佳新特征空间V,可能需要产生(n,n),(m,m)大小的矩阵,还需要产生协方差矩阵去计算更多的信息。
-
降维算法的计算量很大,运行比较缓慢,但无论如何,它们的功能无可替代。
思考:PCA和特征选择技术都是特征工程的一部分,它们有什么不同? 特征工程中有三种方式:特征提取,特征创造和特征选择。上面的降维例子之前的特征选择,你发现有什么不同了吗?
- 特征选择是从已存在的特征中选取携带信息最多的,选完之后的特征依然具有可解释性,我们依然知道这个特征在原数据的哪个位置,代表着原数据上的什么含义。
- PCA,是将已存在的特征进行压缩,降维完毕后的特征不是原本的特征矩阵中的任何一个特征,而是通过某些方式组合起来的新特征。通常来说,在新的特征矩阵生成之前,我们无法知晓PCA都建立了怎样的新特征向量,新特征矩阵生成之后也不具有可读性,我们无法判断新特征矩阵的特征是从原数据中的什么特征组合而来,新特征虽然带有原始数据的信息,却已经不是原数据上代表着的含义了。以PCA为代表的降维算法因此是特征创造(feature creation,或feature construction)的一种。
- PCA一般不适用于探索特征和标签之间的关系的模型(如线性回归),因为无法解释的新特征和标签之间的关系不具有意义。
- 在线性回归模型中,我们使用特征选择。