ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-01-14 13:01:13  阅读:4056  来源: 互联网

标签:arr Min Max self 标准化 decimals np 原始数据


写在前面的话:

数据的标准化:

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

数据的归一化:

  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=ex/i=1nexi x'=e^{x}/\sum^{n}_{i=1}{e^{x_i}} x′=ex/i=1∑n​exi​
    x为原始数据中的一个数据,e为自然函数,分母表示的是原始数据中每个数据被e求指数后的和。分子表示的是原始数据中的一个数据被e求指数。

    Sigmoid函数:

    计算公式:
    x=1/(1+ex) 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. 《推荐系统开发实战》高阳团/编著

Kilig_1 发布了19 篇原创文章 · 获赞 3 · 访问量 3805 私信 关注

标签:arr,Min,Max,self,标准化,decimals,np,原始数据
来源: https://blog.csdn.net/weixin_42792088/article/details/103971069

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有