对于以下有关数据预处理聚类的问题,我非常困惑,在互联网上找不到令人信服的答案。
根据Python 文档,当我们在sckit学习库中使用内置命令进行预处理时,假设数据被表示为N x D矩阵,其中行是示例,列是特性,我们使行间的平均值为零,同时行间的标准差是一致的,如下所示:
X_scaled.mean(axis=0)
array([ 0., 0., 0.])
X_scaled.std(axis=0)
array([ 1., 1., 1.])我的问题是,我们不应该使横列的平均值(特征而不是样本)为零,对于标准差也是一样的,因为我们试图标准化特征,而不是样本。网站和其他资源总是跨行标准化,但它们从来没有解释为什么?
发布于 2018-06-25 23:18:17
我预计您会希望对给定特性的值进行规范化,跨样例。如果您对给定样本的数据进行了标准化处理,那么您就会抛出大量信息。这将用于比较特性(这很少有意义),而不是比较一个特性的样本。
我不知道numpy或sklearn,所以用一点盐来理解它,但是在规范化时,您希望(使用相同的参数)对给定特性的所有数据进行规范化,将该特性的所有值都纳入(-1 . +1)的范围内,平均值为0(或类似的值)。您将对每个特性分别执行此操作,因此它们最终都在该范围内,每个特性的平均值为零。
考虑一个例子,如果您跨给定样本的所有特性进行标准化。
height weight age
person1 180 65 50
person2 140 45 50如果我们跨特性对person1的值进行规范化,那么对person2也这样做,那么person2似乎有一个与person1不同的时代!
如果我们对给定列的样本进行规范化,那么这种关系仍然有效。他们的年龄将相仿;person1将更高,person2将更轻。但是,所有特性的所有值都符合后续分析所需的分布规则。
发布于 2018-06-26 15:12:59
有个地方可以让你的样品正常化。一个例子是当您的功能是计数的时候。在这种情况下,将每个样本规范化为单元L1-范数有效地将每个特性更改为该样本总计数的百分比。
Sklearn的Normalizer是为样本规范化而制作的,并且可以规范为l1或l2规范。
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Normalizer.html
https://stackoverflow.com/questions/51032601
复制相似问题