在我的大学项目中,我得到的数据具有各种值范围,而且不服从正态分布。我已经阅读了sklearn归一化函数的文档,它说归一化是缩放单个样本以获得单位范数的过程。另外,在 sklearn 中还有
Normalization
和 StandardScaler
它们似乎具有相同的功能,即缩放数据。但后来我读到了这篇文章,通过说标准化是达到正态分布的方式,而缩放是对数据进行范围化的方式,讲述了缩放和归一化之间的区别。
标准化根据上下文有不同的含义,有时该术语会产生误导。 我认为 sklearn 可以互换使用这些术语,意思是“将不同尺度上测量的值调整为名义上的通用尺度”(例如,0 到 1 之间),而不是更改数据以使它们遵循正态分布(除了 StandardScaler,这样做)。 根据我的理解,在 sklearn 中,它们的不同之处在于它们处理的输入以及它们的使用方式和用途。
我认为
Normalization
你的意思是
sklearn.preprocessing.Normalizer
。 因此,主要区别在于,在减去平均值后,
sklearn.preprocessing.Normalizer
将
samples缩放到单位范数(向量长度),而
sklearn.preprocessing.StandardScaler
将features缩放到单位方差。 因此,前者作用于行,而后者作用于列。 特别是,
sklearn.preprocessing.normalize
“将输入向量单独缩放到单位范数(向量长度)。'。它可以应用于行(通过将参数
axis
设置为 1)和特征/列(通过设置参数axis
到 0)。它使用以下范数之一:l1
、l2
或 max
来标准化每个非零样本(或每个非零特征,如果轴为 0)。
注意:这里的术语范数指的是数学定义。请参阅此处和此处了解更多信息。
sklearn.preprocessing.Normalizer
“将样本单独归一化为单位范数。”。当
sklearn.preprocessing.normalize
时,它的行为与 axis=1
完全相同。与 normalize
不同,Normalizer
使用 Transformer API 执行标准化(例如,作为预处理 sklearn.pipeline.Pipeline 的一部分)。
sklearn.preprocessing.StandardScaler
“通过删除均值并缩放至单位方差来标准化特征”。它不使用向量的范数,而是计算每个特征的 z 分数。
norm='max'
:
from sklearn.preprocessing import normalize, Normalizer, StandardScaler
X = [[1, 2],
[2, 4]]
# Normalize column based on the maximum of each column (x/max(column))
normalize(X, norm='max', axis=0)
# Normalize column based on the maximum of each row (x/max(row))
normalize(X, norm='max', axis=1)
# Normalize with Normalizer (only rows)
Normalizer(norm='max').fit_transform(X)
# Standardize with StandardScaler (only columns)
StandardScaler().fit_transform(X)
from sklearn.pipeline import Pipeline
pipe = Pipeline([('normalization_step', normalize())] # NOT POSSIBLE
pipe = Pipeline([('normalization_step', Normalizer())] # POSSIBLE
pipe = Pipeline([('normalization_step', StandardScaler())] # POSSIBLE
pipe.score(X, y) # Assuming y exists
上述代码行将按如下方式转换数据:
# Normalize with normalize, axis=0 (columns)
[[0.5, 0.5],
[1. , 1. ]]
# Normalize with normalize, axis=1 (rows)
[[0.5, 1],
[0.5, 1. ]]
# Normalize with Normalizer (rows)
[[0.5, 1],
[0.5, 1. ]]
# Standardize with StandardScaler (columns)
[[-1, -1],
[1, 1. ]]
这不是真的 - 标准缩放器只是通过减去平均值并除以标准差来缩放数据。它不会以某种方式改变数据分布的形状。