数据预处理:标准化和归一化

网上很多关于标准化和归一化的文章,不少是误人子弟的存在。这篇文字希望给大家讲清讲透这两个概念。

一、标准化(standardization)

公式一般为:(X-mean)/std,其中mean是平均值,std是方差。

从公式我们可以看出,标准化操作(standardization)是将数据按其属性(按列)减去平均值,然后再除以方差。这个过程从几何上理解就是,先将坐标轴零轴平移到均值这条线上,然后再进行一个缩放,涉及到的就是平移和缩放两个动作。这样处理以后的结果就是,对于每个属性(每列)来说,所有数据都聚集在0附近,方差为1。计算时对每个属性/每列分别进行。

下面我们通过实操加深印象,并真正理解标准化的实际意义。使用sklearn中的preprocessing中的scale()函数,可以直接将给定数据进行标准化。

首先我们导入需要的库,和需要处理的数据。我们随便导入一支股票,000002万科a。(数据源来自tushare pro版,感谢挖地兔)。

数据预处理:标准化和归一化_第1张图片

接着,我们选取该股票最后的100个交易日的数据,选取价格和成交量两个特征作为演示。很显然,这两个特征量纲不一样,数值相差很大,需要对他们进行一个数据预处理。先看一下原始数据:

数据预处理:标准化和归一化_第2张图片

数据预处理:标准化和归一化_第3张图片

对原始数据进行标准化,如下:

数据预处理:标准化和归一化_第4张图片

数据预处理:标准化和归一化_第5张图片

看到变化了吗,虽然各个点的相对位置看上去还是没变,但是坐标轴变了。均值是0,方差为1。

还有一种标准话的方法是使用sklearn.preprocessing.StandardScaler类,主要是fit()和transform(),使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。

 

二、归一化(scale,缩放到一个指定范围,一般是0到1之间)

公式一般为:(X-min)/(max-min),其中min和max分别是该属性的最小值和最大值。

归一化其实是一种不太标准的翻译而已,真正要理解它,只需要知道它是一种缩放就行。归一化操作的过程,首先是把某个属性(按列)的最大值和最小值之间的距离看成是单位1,然后再看x和最小值的距离占总距离的比例。所以它总是一个处于0到1之间的百分数。

使用sklearn中的preprocessing中的MinMaxScaler类,可以实现归一化,具体方法如下:数据预处理:标准化和归一化_第6张图片

各个点的相对位置还是没变,但是取值范围变成了[0,1]。

 

什么时候需要标准化和归一化?

那么是否任何情况都有必要进行标准化归一化呢?答案是否定的。我们所熟知的决策树、随机森林等概率模型,就不需要。因为它们并不关心变量的值,而是关心变量的分布和变量之间的条件概率。

 

用AI改变金融交易,欢迎关注昂刺鱼微信公众号:炼金狂人

微信:18191828

你可能感兴趣的:(人工智能)