“with_std=False or True”和“with_mean=False or True”之间的 StandardScaler 区别

Posted

技术标签:

【中文标题】“with_std=False or True”和“with_mean=False or True”之间的 StandardScaler 区别【英文标题】:StandardScaler difference between "with_std=False or True" and "with_mean=False or True" 【发布时间】:2019-12-12 11:15:42 【问题描述】:

我正在尝试标准化一些数据以便能够将 PCA 应用于它。我正在使用 sklearn.preprocessing.StandardScaler。我很难理解在参数with_meanwith_std (documentation) 中使用TrueFalse 之间的区别。

谁能给出更详细的解释?

【问题讨论】:

如果您将with_mean/with_std 设置为False,这意味着它将使用0/1 作为均值/标准差,而不是首先在数据上测量这些值。如果两者都设置为False,则使用standard normal distribution 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

我在this thread 中提供了更多详细信息,但我也在这里解释一下。

数据的标准化(每个列/特征/变量单独)涉及以下等式:


说明:

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

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

【讨论】:

嗨,您能否提供一个示例,其中的答案显示 with_mean 和 with_std 设置为 False/True 之间的区别?这将有助于我进一步清除我的理解。很抱歉给您带来麻烦。

以上是关于“with_std=False or True”和“with_mean=False or True”之间的 StandardScaler 区别的主要内容,如果未能解决你的问题,请参考以下文章

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等

shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]

Java基础8---面向对象代码块和继承和this和super和重写和重载和final

Java基础8---面向对象代码块和继承和this和super和重写和重载和final

JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()

malloc和free,brk和sbrk和mmap和munmap的使用和关系以及内存分配的原理