首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在聚类之前跨越行而不是列来标准化(预处理)数据

为什么在聚类之前跨越行而不是列来标准化(预处理)数据
EN

Stack Overflow用户
提问于 2018-06-25 22:30:09
回答 2查看 3.5K关注 0票数 4

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

根据Python 文档,当我们在sckit学习库中使用内置命令进行预处理时,假设数据被表示为N x D矩阵,其中行是示例,列是特性,我们使行间的平均值为零,同时行间的标准差是一致的,如下所示:

代码语言:javascript
复制
X_scaled.mean(axis=0)
array([ 0.,  0.,  0.])

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-25 23:18:17

我预计您会希望对给定特性的值进行规范化,跨样例。如果您对给定样本的数据进行了标准化处理,那么您就会抛出大量信息。这将用于比较特性(这很少有意义),而不是比较一个特性的样本。

我不知道numpy或sklearn,所以用一点盐来理解它,但是在规范化时,您希望(使用相同的参数)对给定特性的所有数据进行规范化,将该特性的所有值都纳入(-1 . +1)的范围内,平均值为0(或类似的值)。您将对每个特性分别执行此操作,因此它们最终都在该范围内,每个特性的平均值为零。

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

代码语言:javascript
复制
        height weight age
person1 180    65     50
person2 140    45     50

如果我们跨特性对person1的值进行规范化,那么对person2也这样做,那么person2似乎有一个与person1不同的时代!

如果我们对给定列的样本进行规范化,那么这种关系仍然有效。他们的年龄将相仿;person1将更高,person2将更轻。但是,所有特性的所有值都符合后续分析所需的分布规则。

票数 7
EN

Stack Overflow用户

发布于 2018-06-26 15:12:59

有个地方可以让你的样品正常化。一个例子是当您的功能是计数的时候。在这种情况下,将每个样本规范化为单元L1-范数有效地将每个特性更改为该样本总计数的百分比。

Sklearn的Normalizer是为样本规范化而制作的,并且可以规范为l1或l2规范。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51032601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档