如何缩放或标准化大部分为 0(范围为 0-1)的数据?

数据挖掘 聚类 数据清理 降维 分配
2022-02-25 23:18:13

我对数据科学比较陌生,而且总体上比较大data munging我目前有各种数据列,范围从,但每列中的大多数值都是这些数据代表了一个客户的某些属性,包括某个客户在特定类别中的购买比例(因此每个比例之和为),此外还有访问次数、访问间隔时间等其他数据等。一组样本行可能如下所示:0101

columns = [other_stuff,'C1','C2','C3','C4','C5','C6']
row = [1945,0.45, 0, 0, 0, 0.3, 0.25]
another_row = [438,0, 0.24, 0, 0.01, 0.5, 0.25]

“比例”变量之一的样本直方图如下所示:

奇怪变量之一的分布

截至目前,我正在努力寻找扩展数据的方法,以使其可用于与具有不同单位/数量级的其他数据进行聚类。我是不是该:

  1. 使用 Min-Max 方法将所有其他变量缩放到 0-1 范围并保持“比例”变量相同

  2. 使用变量的均值和标准差缩放所有变量,即使“比例变量”显然不遵循正态分布(也不能应用对数变换,因为大多数值确实为 0)

  3. 保持一切不变,但对所有变量执行降维并基于主成分执行聚类(如果使用主成分分析)

  4. 以上都不是; 使用一组完全不同的算法/方法

我目前正在使用 sckit-learn 和 Python 3.7 的选项 3。如果里面有包R也有帮助,请把它们扔给我。谢谢你。

1个回答

您没有指定,但假设您正在进行 K-means 聚类,算法计算相似性的方式,或者更技术上的距离,使用欧几里德距离,最大尺寸维度上的距离将压倒值所在的距离数量级更小。

为了克服这个问题,我将对数据进行规范化。我不确定你使用的方法有什么大不了的。如果您对它感到满意,请使用 min-max。不过要小心,因为如果我没记错的话,在 sk-learn 中可以一次性缩放整个数据集,这并不能解决幅度差异。单独缩放每一列,或者如果所有其他列名义上都在 0 和 1 之间,甚至可能只缩放差异很大的那一列。