对于以下关于数据预处理聚类的问题,我很困惑,在网上找不到一个令人信服的答案。在
根据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.])
我的问题是,我们不应该使列的平均值(特征值而不是样本数)为零,标准差也是一样的,因为我们试图标准化特征值,而不是样本值。网站和其他资源总是跨行标准化,但它们从不解释原因?在
有一个地方可以规范化你的样品。一个例子是当你的特征是重要的。在这种情况下,将每个样本规范化为l1标准,可以有效地将每个特征更改为该样本总计数的百分比。在
Sklearn的
Normalizer
用于样本规范化,可以规范化为l1或l2范数。在http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Normalizer.html
我希望您能够规范化给定特性的值,跨越样本。如果你将一个给定样本的数据规范化,那么你已经抛出了很多信息。这将是为了比较特性(这很少有意义),而不是为了比较特性的样本。在
我不知道numpy或sklearn,所以对它有一点怀疑,但是在规范化时,您需要规范化(使用相同的参数)给定特性的所有数据,将该特性的所有值带入(-1。。。+1) ,平均值为零(或类似的值)。你要对每个特性分别做这个,所以它们最终都在这个范围内,每个特性的平均值为零。在
考虑一个例子,如果您对给定样本的所有特性进行了标准化。在
如果我们将person1的值规范化,然后对person2执行相同的操作,那么person2似乎与person1的年龄不同!在
如果我们对给定列的样本进行规范化,那么这些关系仍然有效。他们的年龄会匹配;人1会更高,人2会更轻。但所有特征的所有值都将符合后续分析所需的分布规则。在
相关问题 更多 >
编程相关推荐