深度学习初学者指南
上QQ阅读APP看书,第一时间看更新

3.6.1 监督算法

由于数据降维的监督算法通过考察数据的标签信息找到更好的数据表示。使用这种方法通常会获得比较好的数据降维效果。现在最流行的数据降维监督方法可能是线性判别分析(LDA),将在下一小节中讨论。

线性判别分析

scikit-learn有一个LinearDiscriminantAnalysis类,可以很容易地实现对所需数量的组件进行降维。

通过组件的数量,可以了解所需的维数。其名称来源于主成分分析(PCA),它是一种确定数据集中协方差矩阵的特征向量和特征值的统计方法,由此得到,与最大特征值相对应的特征向量是最重要的主分量。当我们使用PCA方法来减少到特定数量的分量时,我们想保留那些重要的分量在由数据协方差矩阵的特征值和特征向量所导出的空间中。

LDA和其他降维技术也有类似的理念,它们的目标是找到低维空间(基于所需的组件数量),以便根据数据的其他属性实现对数据更好的表示。

例如,对于心脏病数据集,我们可以执行LDA方法将整个数据集从13维降低到二维,同时使用标签[0,1,2,3,4]通知LDA算法实现对那些标签所代表群体的更好的分离。

为此,我们可以遵循以下步骤:

1)首先,重新加载数据并删除缺失值:

注意,我们之前不必处理心脏病数据集的缺失值,因为pandas会自动忽略缺失值。但是在这里,需要严格地将数据转换为数字,其中缺失的值将被转换为NaN。因为我们指定了errors='coerce',这将强制转换中的任何错误变成NaN。因此,我们使用dropna(),忽略数据集中具有这些缺失数据的行,因为它们会导致LDA算法失败。

2)接下来,分别准备包含数据和目标的X和y变量,进行LDA计算,具体的计算过程如下:

在这个例子中,X_包含了以二维形式表示的整个数据集,如n_components=2所示。选择两个组件只是为了以图形方式说明数据的外观。但是你可以将其更改为想要的任意数量的组件。

图3.8描述了将13维数据集降低到二维数据集的样子。

图3.8 使用LDA将维度从13缩小到2

请注意,0(表示没有心脏疾病)的值大多聚集在左侧,而其余的值(即1、2、3和4,表示存在心脏疾病)似乎聚集在右侧。这是一个很好的属性,当我们从13列中选择两列时,在图3.2到图3.6中没有看到这个属性。

从技术上讲,使用LDA导出的二维数据集中仍然包含了13维数据集中的相关信息。如果数据在这些低维表示中似乎是可分离的,那么深度学习算法就可能有很好的机会学习到对数据进行高性能分类或回归的模型。

虽然LDA可以提供一种非常好的方式,通过数据中的标签来执行数据维度缩减,但是我们可能并不总是拥有带标签的数据,或者可能不希望使用已有的标签。在这些情况下,应该探索不需要使用标签信息的其他具有健壮性的方法,例如将在下文中讨论的无监督技术。