为什么在集群之前跨行而不是跨列缩放以标准化(预处理)数据

时间:2018-06-25 22:30:09

标签: python scikit-learn cluster-analysis k-means

我非常困惑,无法在互联网上找到有关数据预处理聚类的以下问题的令人信服的答案。

根据Python文档

http://scikit-learn.org/stable/modules/preprocessing.html

当我们使用sckit学习库中的内置命令进行预处理时(假设数据以N x D矩阵形式表示,其中行是样本,列是特征),我们将行的平均值设为零,并在同时,各行之间的标准偏差是统一的,如下所示:

X_scaled.mean(axis=0)
array([ 0.,  0.,  0.])

X_scaled.std(axis=0)
array([ 1.,  1.,  1.])

我的问题是,我们是否应该使列的均值(特征而不是样本)为零,并且对于标准偏差也应相同,因为我们正在尝试标准化特征而不是样本。网站和其他资源始终跨行进行标准化,但它们从未解释原因?

如果有人能解释一下,我将不胜感激。

2 个答案:

答案 0 :(得分:4)

我希望您希望在样本中标准化给定功能的值。如果您通过给定样本的各个特征对它们的数据进行归一化,则会浪费很多信息。那将是用于比较特征(很少有意义),而不是用于比较特征的样本。

我不知道numpy或sklearn,所以请带一点盐,但是当进行归一化时,您想要归一化(使用相同的参数)给定特征的所有数据,以将该特征的所有值引入(-1 ... +1)的范围,平均值为零(或类似的值)。您将分别为每个功能执行此操作,因此它们都将落在该范围内,每个功能的均值为零。

如果您对给定样本的所有功能进行了归一化,请考虑一个示例。

        height weight age
person1 180    65     50
person2 140    45     50

如果我们对要素中的person1的值进行归一化,然后对person2进行相同的处理,则person2的年龄似乎与person1不同!

如果我们对给定列的样本进行归一化,则这些关系仍然成立。他们的年龄会匹配; person1更高,person2更低。但是所有功能的所有值都将适合后续分析所需的分布规则。

答案 1 :(得分:3)

有一个地方可以标准化样品。一个例子就是您的功能很重要。在这种情况下,将每个样本归一化为l1范数有效地将每个特征更改为该样本总数的百分比。

Sklearn的Normalizer用于样本归一化,可以归一化为l1或l2范数。

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Normalizer.html