机器学习的数据准备和功能工程课程介绍了常规数据准备,但本课程重点介绍了针对聚类的准备。
在聚类中,通过将这两个样本的所有特征数据组合到一个数值中,您可以计算两个样本之间的相似度。合并特征数据需要数据具有相同的比例。本部分将介绍如何对分位数进行归一化、转换和创建,并讨论为什么分位数是转换任何数据分布的最佳默认选择。使用默认选项后,您可以在不检查数据分布情况的情况下转换数据。
将数据归一化
您可以通过对数据进行归一化,将多个特征的数据转换为相同的比例。具体而言,归一化非常适合处理最常见的数据分布,即高斯分布。与分位数相比,归一化所需的数据要少得多。通过计算数据的 z-score 来进行数据归一化,如下所示:
\[x'=(x-\mu)/\sigma\\ \begin{align*} \text{where:}\quad \mu &= \text{mean}\\ \sigma &= \text{standard deviation}\\ \end{align*} \]
让我们看看使用和不使用归一化的示例之间的相似性。在图 1 中,您发现红色似乎更类似于蓝色而不是黄色。但是,x 轴和 y 轴上的地图项不具有相同的缩放比例。因此,观察到的相似性可能是未缩放数据的工件。使用 z-score 进行归一化后,所有特征的比例相同。现在,您发现红色其实更接近黄色。因此,在对数据进行归一化后,您可以更准确地计算相似性。
总之,只要满足以下任一条件,即可应用标准化:
- 您的数据是高斯分布值。
- 您的数据集缺少足够的数据来创建分位数。
使用 Log Transform
有时,数据集符合在低端聚集数据的幂律分布。在图 2 中,红色更接近黄色而不是蓝色。
使用日志转换来处理幂律分布。在图 3 中,log 转换可实现更平滑的分布,并且红色更接近蓝色,而非黄色。
使用分位数
归一化和日志转换可以解决特定的数据分布问题。如果数据不符合高斯分布或幂律分布,会怎么样?是否有适用于所有数据分发的一般方法?
我们来试着对这种分布进行预处理。
直观地说,如果这两个示例之间只有几个示例,则这两个示例相似,无论它们的值如何。相反,如果这两个示例之间有许多示例,那么这两个示例就不那么相似了。因此,两个样本之间的相似度会随着样本数量的增加而减小。
将数据归一化只是再现数据分布,因为归一化是一个线性转换。应用日志转换也并不反映您对相似性运作方式的直观理解(如下面的图 5 所示)。
而是将数据拆分为多个区间,让每个区间包含相同数量的样本。这些间隔边界称为“分位数”。
通过执行以下步骤,将您的数据转换为分位数:
- 确定间隔数。
- 定义间隔,使每个间隔都具有相同的样本数。
- 将各个示例替换为其所属的时间间隔的索引。
- 通过将索引值扩展到 [0,1],使索引与其他特征数据处于相同的范围。
将数据转换为分位数后,两个示例之间的相似度与这两个示例之间的样本数成反比。或者,从数学上来看,“x”为数据集中的任意示例:
- \(sim(A,B) \approx 1 − | \text{prob}[x > A] − \text{prob}[x > B] |\)
- \(sim(A,B) \approx 1 − | \text{quantile}(A) − \text{quantile}(B) |\)
分位数是您转换数据的最佳选择。不过,要创建能够可靠地表示底层数据分布的分位数,您需要大量数据。一般来讲,若要创建分位数,您至少应该有 \(10n\) 个样本。 \(n\) 如果您没有足够的数据,请坚持规范化。
检查您的理解情况
对于以下问题,请假定您有足够的数据来创建分位数。
问题一
- 数据分布为高斯分布。
- 您可以深入了解数据代表什么,从而了解数据不应进行非线性转换。因此,您应避免分位数,而是选择归一化。
问题二
缺少数据
如果您的数据集包含特定特征缺少值的示例,但此类示例很少见,则您可以移除这些示例。如果这种情况频繁发生,我们可以选择完全移除此功能,或者使用机器学习模型来预测其他示例的缺失值。例如,您可以使用基于现有特征数据进行训练的回归模型来推断缺少的数字数据。