下面的习题来自机器学习实战:基于Scikit-Learn和Tensorflow一书。

  1. 降低数据集维度的主要动机是什么?有什么主要弊端?
    答:降维的动机:1. 加速后续的训练算法(在某些情况下,也可能为了消除噪声和冗余特种额,使训练算法性能更好)2. 将数据可视化,从中获得洞察,了解最重要的特征 3. 节省空间(压缩)
    主要弊端:1. 丢失部分信息,可能使后续训练算法性能降低 2. 可能是计算密集型的 3. 为机器学习流水线添加了些许复杂度 4. 转换后的特征往往难以解释

  2. 什么是维度的诅咒?
    答:维度的诅咒是指许多在低维空间中不存在的问题,在高维空间 中发生。在机器学习领域,一个常见的现象是随机抽样的高维向量通 常非常稀疏,提升了过度拟合的风险,同时也使得在没有充足训练数 据的情况下,要识别数据中的模式非常困难。

  3. 一旦数据集被降维,是否还有可能逆转?如果有,怎么做?如 果没有,为什么?
    答: 一旦使用我们讨论的任意算法减少了数据集的维度,几乎不可 能再将操作完美地逆转,因为在降维过程中必然丢失了一部分信息。 虽然有一些算法(例如PCA)拥有简单的逆转换过程,可以重建出与 原始数据集相似的数据集,但是也有一些算法不能实现逆转(例如TSNE)。

  4. PCA可以用来给高度非线性数据集降维么?
    答:对大多数数据集来说,PCA可以用来进行显著降维,即便是高 度非线性的数据集,因为它至少可以消除无用的维度。但是如果不存 在无用的维度(例如瑞士卷),那么使用PCA降维将会损失太多信 息。你希望的是将瑞士卷展开,而不是将其压扁。

  5. 假设你在一个1000维数据集上执行PCA,方差解释比设为 95%。产生的结果数据集维度是多少?
    答:这是个不好回答的问题,它取决于数据集。我们来看看两个极 端的例子。首先,假设数据集是由几乎完全对齐的点组成的,在这种 情况下,PCA可以将数据集降至一维,同时保留95%的差异性。现 在,试想数据集由完全随机的点组成,分散在1000个维度上,在这种 情况下,需要在1000个维度上保留95%的差异性。所以,这个问题的 答案是:取决于数据集,它可能是1到1000之间的任何数字。将解释 方差绘制成关于维度数量的函数,可以对数据集的内在维度获得一个 粗略的概念。

  6. 常规PCA、增量PCA、随机PCA及核PCA各适用于何种情况?
    答:常规PCA是默认选择,但是它仅适用于内存足够处理训练集的 时候。增量PCA对于内存无法支持的大型数据集非常有用,但是它比 常规PCA要来得慢一些,所以如果内存能够支持,还是应该使用常规 PCA。当你需要随时应用PCA来处理每次新增的实例时,增量PCA对 于在线任务同样有用。当你想大大降低维度数量,并且内存能够支持 数据集时,使用随机PCA非常有效,它比常规PCA快得多。最后对于 非线性数据集,使用核化PCA行之有效。

  7. 如何在你的数据集上评估降维算法的性能?
    答:直观来说,如果降维算法能够消除许多维度并且不会丢失太多 信息,那么这就算一个好的降维算法。进行衡量的方法之一是应用逆 转换然后测量重建误差。然而并不是所有的降维算法都提供了逆转 换。还有另一种选择,如果你将降维当作一个预处理过程,用在其他 机器学习算法(比如随机森林分类器)之前,那么可以通过简单测量 第二个算法的性能来进行评估。如果降维过程没有损失太多信息,那么第二个算法的性能应该跟使用原始数据集一样好。

  8. 链接两个不同的降维算法有意义么?
    答:链接两个不同的降维算法绝对是有意义的。常见的例子是使用 PCA快速去除大量无用的维度,然后应用另一种更慢的降维算法,如 LLE。这样两步走的策略产生的结果可能与仅使用LLE相同,但是时 间要短得多。

  9. 加载MNIST数据集(第3章中介绍),将其分为一个训练集和 一个测试集(将前60000个实例用于训练,其余10000个用来测试)。 在训练集上训练一个随机森林分类器,并记录训练时长,然后在测试 集上对结果模型进行评估。接下来,用PCA给数据集降维,方差解释 比设为95%。在降维后的新数据集上训练一个新的随机森林分类器, 看看需要多长时间,是不是快得多?最后,在测试集上评估分类器, 跟前一个分类器比起来如何?

  10. 使用t-SNE将MNIST数据集降至两个维度,然后用Matplotlib绘 制结果。你可以通过散点图——用10个不同的颜色来代表每个图像的 目标类别,或者,你也可以在每个实例的位置写入彩色数字,甚至你 还可以绘制数字图像本身的缩小版(如果你绘制所有数字,视觉效果 会太凌乱,所以你要么绘制一个随机样本,要么选择单个实例,但是 这个实例的周围最好没有其他绘制的实例)。现在你应该得到了一个 很好的可视化结果及各自分开的数字集群。尝试使用其他降维算法, 如PCA、LLE或MDS等,比较可视化结果。