数据标准化的常见方法之Min-max

1. 数据标准化的目的

  数据标准化表示将数据按比例缩放,使之落入一个小的特定区间,一般的目的在于:去除数据的单位限制,转化为量纲的纯数值,便于不同单位或数量级的指标能够进行比较和加权。数据的归一化便是一个典型的案例。

1.1 数据的归一化

  1. 把数转换为(0,1)之间的小数
  2. 把有量纲的表达式转换为无量纲的表达式

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=max1jn{ xj}min1jn{ xj}ximin1jn{ 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.   ]

本文参考链接:数据标准化的常见方法(Min-Max标准化、Z-Score标准化等)

猜你喜欢

转载自blog.csdn.net/weixin_43624728/article/details/113546847
今日推荐