数据标准化的常见方法(Min-Max标准化、Z-Score标准化等)

写在前面的话:

数据的标准化:

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

数据的归一化:

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

归一化的好处:在多指标评价体系中,由于个评价指标的性质,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱值水平低指标的作用,因此,为了保证结果的可靠性,需要对原始数据进行标准化处理。

经验上来说,归一化就是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

1.1 数据标准化

  1. Min-Max标准化
    在这里插入图片描述
    Min-Max标准化是指对原始数据进行线性变换,将值映射到[0,1]之间

  2. Z-Score标准化
    在这里插入图片描述
    Z-Score标准化是指:基于原始数据的均值(mean)和标准差(standard deviation)来进行数据的标准化。其主要目的是将不同量级的数据统一化为同一个量级,统一用计算出的Z-Score值衡量,保证了数据间具有可比性。

  3. 小数定标(Decimal scaling)标准化
    在这里插入图片描述

  4. 均值归一法(Mean normalization)

    下图的 u是表示均值,value表示在一组数据中第i个元素的值

在这里插入图片描述
通过原始数据中的均值、最大值和最小值来进行数据标准化。(上述两条公式都是差不多的)

  1. 向量归一化
    在这里插入图片描述

  2. 指数转换
    指数转换是指:通过对原始数据进行相应的指数函数变换来进行数据的标准化。常见的指数转换函数方法如下所示:

    lg函数:

    计算公式:
    在这里插入图片描述
    x为原始数据中的一个数据,Xmax表示原始数据中的最大值

    Softmax函数:

    计算公式:
    x = e x / i = 1 n e x i x'=e^{x}/\sum^{n}_{i=1}{e^{x_i}}
    x为原始数据中的一个数据,e为自然函数,分母表示的是原始数据中每个数据被e求指数后的和。分子表示的是原始数据中的一个数据被e求指数。

    Sigmoid函数:

    计算公式:
    x = 1 / ( 1 + e x ) x'=1/(1+e^{-x})
    同样,x为原始数据中的一个常数,e为自然常数。

1.2 实现

# -*-coding:utf-8-*-
import numpy as np
import math
'''
around(arr,decimals=?)?表示保留多少位小数
'''


class Datanorm:
    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_Max标准化:{}".format(arr))

    def Z_ScoreNorm(self):
        arr = np.around((self.arr - self.x_mean) / self.x_std, decimals=4)
        print("Z_Score标准化:{}".format(arr))

    def Decimal_ScalingNorm(self):
        power = 1
        maxValue = self.x_max
        while maxValue / 10 >= 1.0:
            power += 1
            maxValue /= 10
        arr = np.around((self.arr / pow(10, power)), decimals=4)
        print("小数定标标准化:{}".format(arr))

    def MeanNorm(self):
        first_arr = np.around((self.arr-self.x_mean) / (self.x_max - self.x_min), decimals=4)
        second_arr = np.around((self.arr - self.x_mean)/self.x_max, decimals=4)
        print("均值归一法:\n公式一:{}\n公式二:{}".format(first_arr, second_arr))

    def Vector(self):
        arr = np.around((self.arr/self.arr.sum()), decimals=4)
        print("向量归一法:{}".format(arr))

    def exponeential(self):

        first_arr = np.around(np.log10(self.arr) / np.log10(self.x_max), decimals=4)
        second_arr = np.around(np.exp(self.arr)/sum(np.exp(self.arr)), decimals=4)
        three_arr = np.around(1/(1+np.exp(-1*self.arr)), decimals=4)
        print("lg函数:{}\nSoftmax函数:{}\nSigmoid函数:{}\n".format(first_arr,second_arr,three_arr))


if __name__ == "__main__":
    a = Datanorm()
    a.Min_MaxNorm()
    a.Z_ScoreNorm()
    a.Decimal_ScalingNorm()
    a.MeanNorm()
    a.Vector()
    a.exponeential()

1.3 参考文献

1.数据的标准化
2. 《推荐系统开发实战》高阳团/编著

发布了19 篇原创文章 · 获赞 3 · 访问量 3803

猜你喜欢

转载自blog.csdn.net/weixin_42792088/article/details/103971069
今日推荐