上QQ阅读APP看书,第一时间看更新
3.3.2 标准化到零均值和单位方差
另一种预处理实数值数据的方法是使其均值为0和单位方差。这个过程有很多名称,如标准化、z评分、中心化或标准化。
假设,根据上面的特征,我们可以将x标准化如下:
其中μ是x上每一列的均值对应的向量,σ是x中每一列的标准差对应的向量。
对x进行标准化后,如果重新计算均值和标准差,则均值为0,标准差为1。在Python中,可以执行以下操作:
输出结果如下:
注意,标准化后数据的平均值为0,标准差为1。当然,也可以使用scikit-learn StandardScaler对象完成同样的事情,具体做法如下:
这将产生相同的结果,但数值差异可以忽略不计。实际上,这两种方法实现的是相同的目标。
可以直接使用DataFrame或者通过StandardScaler对象实现对数据的标准化处理。尽管这两种方法都是可行的,但是如果你开发的是针对生产实际的应用程序,那么应该更喜欢使用StandardScaler对象。一旦StandardScaler对象使用了fit()方法,那么它就可以通过重新调用transform()方法轻松地用于新的、不可预见的数据,然而,如果我们直接在pandas DataFrame上进行操作,那么将不得不手动存储平均值和标准差,并且在每次标准化新数据时都需要重新加载它。
现在,为了便于比较,图3.4描述了数据标准化后的新范围。如果你仔细观察坐标轴,就会注意到零值的位置是大部分数据所在的位置,也就是均值所在的位置。因此,数据簇的分布以均值零为中心。
图3.4 标准化列x5和x10的散点图及其直方图
请再次注意,如图3.4所示,应用标准化流程后数据的分布并没有改变。但如果想改变数据的分布呢?那么继续学习下一节。