sklearn StandardScaler在“ with_std = False或True”和“ with_mean = False或True”之间存在差异

时间:2019-08-04 20:24:09

标签: python scikit-learn pca decomposition

我正在尝试标准化一些数据,以便能够对其应用PCA。我正在使用sklearn.preprocessing.StandardScaler。我很难理解在参数“ with_mean”和“ with_std”中使用“ True”或“ False”之间的区别。这是命令的说明:

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

有人可以提供更详细的解释吗?

非常感谢您!

2 个答案:

答案 0 :(得分:1)

我在这篇帖子https://stackoverflow.com/a/50879522/5025009中提供了更多详细信息,但我也要在这里进行解释。

数据标准化(每个列/功能/每个变量)涉及以下方程式:

enter image description here


说明:

如果将with_meanwith_std设置为False,则平均值μ设置为0,而std设置为1,假设列/特征来自正态高斯分布(均值为0和1 std)。

如果将with_meanwith_std设置为True,则实际上将使用数据的真实μσ。这是最常见的方法。

答案 1 :(得分:0)

通常使用标准缩放器将normal distribution与数据拟合,然后计算Z-scores。因此,这意味着首先计算数据的平均值μ标准偏差σ,然后使用计算 Z分数 > z =(x-μ)/σ

通过将with_meanwith_std设置为False,我们分别将均值μ设置为0,将标准偏差σ设置为1。如果两者都设置为{{ 1}},因此我们计算出standard normal distribution [wiki]的Z得分。

False设置为with_mean的主要用例是处理稀疏矩阵。稀疏矩阵包含大量零,因此以零通常不使用(或很少使用)内存的方式存储。如果我们将均值拟合,然后计算z分数,则几乎可以肯定的是,所有零都将映射到非零值,从而使用(大量内存)。对于稀疏的大型矩阵,可能会导致内存错误:数据如此之大,导致内存不再能够存储矩阵。通过设置μ= 0 ,这意味着零值将映射到零。标准缩放器的结果是形状相同的稀疏矩阵。