数据标准化处理

本次学习我们主要是从数学角度简单介绍一下为什么要数据规范,如何数据规范。

一、什么是数据规范化

数据规范化(归一化)处理时数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。如将工资收入属性值映射到[-1,1]或者[0,1]内。
PS:数据规范化对于基于距离的挖掘算法尤为重要。

二、规范化的处理方法

1、最小-最大规范化——离差标准化

离差标准化是对原始数据的线性变换,将数值映射到[0,1]之间。转换公式如下:
$$x^* = \frac{x-min}{max-min}$$
其中,$max$为样本数据的最大值,$min$为样本数据的最小值。$max-min$为极差。离差标准化保留了原来数据中存在的关系,是消除量纲和数据取值范围影响的最简单方法。这种处理方法的缺点是若数值集中且某个数值很大,规范化后各值会接近于0,并且将会相差不大。若将来遇到超过目前属性$[min,max]$取值范围的时候,会引起系统出错,需要重新确定$min$和$max$。

2、零-均值规范化——标准差标准化

标准差标准化经过处理的数据的均值为0,标准差为1。转化公式为:
$$x^* = \frac{x-\bar{x}}{\sigma}$$
其中$\bar{x}$为原始数据的均值,$\sigma$为原始数据的标准差,是当前用得最多的数据标准化方法。

3、小数定标规范化

通过移动属性值的小数位数,讲属性值映射到[-1,1]之间,移动的小数位数取决于属性值绝对值的最大值。转化公式为:
$$x^* = \frac{x}{10^k}$$

三、python实现三种规范化

1
2
3
4
5
6
7
8
9
10
#-*- coding:utf-8 -*-
#数据规范化
import pandas as pd

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())) #小数定标规范化

可以尝试以上代码,观察一下三种规范化处理完的数据有何不同。

鼓励我一下吧,我会有更多原创的!