StandardScaler如何不会破坏数据完整性?

时间:2019-10-21 07:35:48

标签: python machine-learning scikit-learn

由于使用sklearns的StandardScaler对初始数据进行了归一化,因此初始数据不再相同就不是问题了吗?

示例:

from sklearn.preprocessing import StandardScaler
import numpy as np


data = np.array([[1,1],[2,0]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

print(data)
[[1 1]
[2 0]]

print(scaled_data)
[[-1.  1.]
 [ 1. -1.]]

如您所见,由于归一化,数据不相同。

由于数据不同以及在哪种情况下适合执行规范化(基本上,我们对具有负值的数据执行此操作,但我指的是在什么过程中合适),该更改如何不影响将来的处理结果?

2 个答案:

答案 0 :(得分:0)

让我们去官方文档看看这个功能: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

由此,我们可以看到以下公式: 样本x的标准分数计算如下:

z =(x-u)/ s 在这里,u-均值&s-标准差

enter image description here

根据正态分布定理,我们可以使用上述公式和分布来表示任何数据。

从几何上讲,我们要减去具有相同值的字段/列的所有值,然后除以另一个相同的值。

我们只是在缩放数据,因此,数据完整性不会丢失

答案 1 :(得分:0)

要记住的另一点是sklearn中StandardScaler类的默认设置不会默认情况下就地修改数据:

copy:布尔值,可选,默认为True 如果为False,请尝试避免复制并改为就地缩放。不能保证总是在原地工作;例如如果数据不是NumPy数组或scipy.sparse CSR矩阵,则可能仍会返回副本。”

因此,在上面,由于您已将结果分配给 scaled_data 名称,因此只要不更改以下内容,由 data 引用的对象将保持不变。 copy = StandardScaler中的True默认参数。