sklearn StandardScaler 似乎无法正常工作

Posted

技术标签:

【中文标题】sklearn StandardScaler 似乎无法正常工作【英文标题】:sklearn StandardScaler doesn't seem to be working properly 【发布时间】:2020-04-23 08:41:48 【问题描述】:

我正在尝试对我的数据进行规范化,以便在以后的假设检验中正常分布。我试图规范化的数据points 是这样的:

      P100m   Plj  Psp  Phj  P400m  P110h   Ppv  Pdt  Pjt  P1500
0       938  1061  773  859    896    911   880  732  757    752
1       839   975  870  749    887    878   880  823  863    741
2       814   866  841  887    921    939   819  778  884    691
3       872   898  789  878    848    879   790  790  861    804
4       892   913  742  803    816    869  1004  789  854    699
 ...   ...  ...  ...    ...    ...   ...  ...  ...    ...
7963    755   760  604  714    812    794   482  571  539    780
7964    830   845  524  767    786    783   601  573  562    535
7965    819   804  653  840    791    699   659  461  448    632
7966    804   720  539  758    830    782   731  487  425    729
7967    687   809  692  714    565    741   804  527  738    523

我正在使用sklearn.preprocessing.StandardScaler(),我的代码如下:

scaler = preprocessing.StandardScaler()
scaler.fit(points)
points_norm = scaler.transform(points)
points_norm_df = pd.DataFrame(points_norm, columns = ['P100m', 'Plj', 'Psp', 'Phj', 'P400m', 
'P110h', 'Ppv', 'Pdt', 'Pjt','P1500'])

奇怪的是,我正在从scipy.stats.anderson 运行 Anderson-Darling 正态性检验,结果是它与正态分布相差甚远。

我不是最熟练的统计学家。我误解了我在这里做什么还是我的代码/数据有问题?

任何帮助将不胜感激

【问题讨论】:

你能否详细说明它“似乎无法正常工作” @sshashank124 '我正在尝试规范化我的数据,使其正常分布' 【参考方案1】:

正如 gilad 已经指出的那样,StandardScaler 正在标准化您的数据。

您可以在此处找到预处理方法列表:https://scikit-learn.org/stable/modules/preprocessing.html

您在寻找:

6.3.2.1。映射到均匀分布

QuantileTransformer 和 quantile_transform 提供了一个非参数 将数据映射到具有值的均匀分布的转换 在 0 到 1 之间

这会像这样工作:

quantile_transformer = preprocessing.QuantileTransformer(random_state=0)
points_norm = quantile_transformer.fit_transform(points)

【讨论】:

运行正态性检验,执行这些步骤后,结果返回数据不正常。 什么是正常的?这是之后的统一分布:en.wikipedia.org/wiki/Uniform_distribution_(continuous)【参考方案2】:

StandardScaler 并未声称使数据具有正态分布而不是标准化,以便您的数据具有零均值和单位方差。

来自documentation:

通过去除均值和缩放到单位方差来标准化特征

样本x的标准分计算为z = (x - u) / s 其中u 是训练样本的平均值,如果是,则为零 with_mean=Falses是训练的标准差 样本或一个 with_std=False

【讨论】:

啊,我误会了。那么normalize 会做什么呢? QuantileTransformeroutput_distribution='normal' 如果你真的想要的话 @glemaitre 这将从数据集中删除值,不是吗?我只是想重新调整它。 它只会重新缩放数据而不删除它。它只会将数据映射到给定的分布(均匀或正态),无论原始分布是:scikit-learn.org/dev/auto_examples/preprocessing/…

以上是关于sklearn StandardScaler 似乎无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

[sklearn][standardscaler] 我可以反转模型输出的标准缩放器吗?

sklearn 笔记:数据归一化(StandardScaler)

sklearn.preprocessing.StandardScaler数据标准化

意外的结果sklearn StandardScaler

用于 R 的可训练 sklearn StandardScaler

sklearn StandardScaler 返回全零