这里就不说为什么要做数据规范化了,直接讲几种规范化的方法。
有许多规范化的方法,我们将学习种:最大-最小规范化、分数规范化、小数定标规范化。这里令是数值属性,具有个观测值。
一、原理
1.最大-最小规范化
假设和分别为属性的最大值和最小值。最小-最大规范化通过计算
把A的值映射到区间,中的。
最小-最大规范化保持原始数据值之间的联系。如果今后的输入实例落在的原数据值域之外,则该方法将面临“越界”错误。
2.分数(z-score)规范化(或零均值规范化)
属性 的值基于 的均值(即平均值)和标准差规范化。的值被规范化为,由下式计算:
其中,和分别为属性 的均值和标准差。
上面的标准差可以用均值绝对偏差替换。 的均值绝对偏差(mean absolute deviation) 定义为
这样,使用均值绝对差的 分数规范化为
对于离群点,均值绝对偏差 比标准差更加鲁棒。在计算均值绝对偏差时,不对到均值的偏差即取平方,因此离群点的影响多少有点降低。
3.小数定标规范化
小数定标规范化通过移动属性值的小数定位置进行规范化。小数点的移动位数依赖于的最大绝对值。A的值被规范化为,由下式计算:
其中是使得的最小整数。
举例:
假设 的取值由 到 。 的最大绝对值为 。因此,为使用小数定标规范化,我们用 (即)除每个值。因此, 被规范化为 ,而 被规范化为 。
注意,规范化可能将原来的数据改变很多,特别是使用 分数规范化或小数定标规范化时尤其如此。有必要保留规范化参数(如均值和标准差,如果使用 分数规范化的话),以便将来的数据可以用一致的方式规范化。
4.归一化方法
由下式进行计算:
则且无量纲,并且显然有。
二、代码实现
#-*- coding: utf-8 -*-
#数据规范化
import pandas as pd
import numpy as np
datafile = '../data/normalization_data.xls' #参数初始化
data = pd.read_excel(datafile, header = None) #读取数据
(data - data.min())/(data.max() - data.min()) #最小-最大规范化
(data - data.mean())/data.std() #零-均值规范化
data/10**np.ceil(np.log10(data.abs().max())) #小数定标规范化