1. 数据标准化的目的
数据标准化表示将数据按比例缩放,使之落入一个小的特定区间,一般的目的在于:去除数据的单位限制,转化为量纲的纯数值,便于不同单位或数量级的指标能够进行比较和加权。数据的归一化便是一个典型的案例。
1.1 数据的归一化
- 把数转换为(0,1)之间的小数
- 把有量纲的表达式转换为无量纲的表达式
1.2 归一化的好处
归一化的好处在于:在多指标评价体系中,由于各个评价指标的性质,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱值水平低指标的作用。因此,为了保证结果的可靠性,需要对原始数据进行标准化处理。
经验上来说,归一化就是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
2. Min-max标准化
2.1 定义
对序列
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn进行变换:
y
i
=
x
i
−
m
i
n
1
≤
j
≤
n
{
x
j
}
m
a
x
1
≤
j
≤
n
{
x
j
}
−
m
i
n
1
≤
j
≤
n
{
x
j
}
y_i=\frac{x_i-min_{1≤j≤n\{x_j\}}}{max_{1≤j≤n\{x_j\}}-min_{1≤j≤n\{x_j\}}}
yi=max1≤j≤n{xj}−min1≤j≤n{xj}xi−min1≤j≤n{xj}
则新序列
y
1
,
y
2
,
.
.
.
,
y
n
∈
[
0
,
1
]
y_1,y_2,...,y_n∈[0,1]
y1,y2,...,yn∈[0,1]且无量纲。一般的数据需要时都可以考虑先进行规范化处理。
Min-max标准化是对原始数据进行线性变换,将值映射到[0,1]之间。
2.2 实现代码
import numpy as np
import math
"""
around(arr,decimals=?)?maintain x decimals
"""
class DataNormalization:
def __init__(self):
self.arr = np.array([1,2,3,4,5,6,7,8,9])
self.x_max = self.arr.max()
self.x_min = self.arr.min()
self.x_mean = self.arr.mean()
self.x_std = self.arr.std()
def Min_MaxNorm(self):
arr = np.around(((self.arr - self.x_min) / (self.x_max - self.x_min)), decimals = 4)
print("Min_MaxNorm:{}".format(arr))
if __name__ == "__main__":
a = DataNormalization()
a.Min_MaxNorm()
运行结果如下:
Min_MaxNorm:[0. 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1. ]