为什么在聚类之前对数据进行标准化(预处理),而不是跨行缩放

2024-03-28 21:00:33 发布

您现在位置:Python中文网/ 问答频道 /正文

对于以下关于数据预处理聚类的问题,我很困惑,在网上找不到一个令人信服的答案。在

根据Python documentation,当我们使用sckit learn library中的内置命令进行预处理时,如果数据被表示为N x D矩阵,其中行是样本,列是特征,我们使行的平均值为零,同时行之间的标准差统一如下:

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

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

我的问题是,我们不应该使列的平均值(特征值而不是样本数)为零,标准差也是一样的,因为我们试图标准化特征值,而不是样本值。网站和其他资源总是跨行标准化,但它们从不解释原因?在


Tags: 数据答案documentationlibrary聚类arraylearn内置
2条回答

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

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

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

我希望您能够规范化给定特性的值,跨越样本。如果你将一个给定样本的数据规范化,那么你已经抛出了很多信息。这将是为了比较特性(这很少有意义),而不是为了比较特性的样本。在

我不知道numpy或sklearn,所以对它有一点怀疑,但是在规范化时,您需要规范化(使用相同的参数)给定特性的所有数据,将该特性的所有值带入(-1。。。+1) ,平均值为零(或类似的值)。你要对每个特性分别做这个,所以它们最终都在这个范围内,每个特性的平均值为零。在

考虑一个例子,如果您对给定样本的所有特性进行了标准化。在

        height weight age
person1 180    65     50
person2 140    45     50

如果我们将person1的值规范化,然后对person2执行相同的操作,那么person2似乎与person1的年龄不同!在

如果我们对给定列的样本进行规范化,那么这些关系仍然有效。他们的年龄会匹配;人1会更高,人2会更轻。但所有特征的所有值都将符合后续分析所需的分布规则。在

相关问题 更多 >