zoukankan      html  css  js  c++  java
  • 数据标准化

    常见的数据标准化方法有以下6种:
    1、Min-Max标准化
    Min-Max标准化是指对原始数据进行线性变换,将值映射到[0,1]之间

    2、Z-Score标准化
    Z-Score(也叫Standard Score,标准分数)标准化是指:基于原始数据的均值(mean)和标准差(standard deviation)来进行数据的标准化。

    3、小数定标(Decimal scaling)标准化
    小数定标标准化是指:通过移动小数点的位置来进行数据的标准化。小数点移动的位数取决于原始数据中的最大绝对值。

    4、均值归一化法
    均值归一化是指:通过原始数据中的均值、最大值和最小值来进行数据的标准化

    5、向量归一化
    向量归一化是指:通过用原始数据中的每个值除以所有数据之和来进行数据的标准化

    6、指数转换
    指数转换是指:通过对原始数据的值进行相应的指数函数变换来进行数据的标准化。进行指数转换常见的函数方法有lg函数、Softmax函数和Sigmoid函数

    实例1:实现数据的标准化
    要对原始数据[1,2,3,4,5,6,7,8,9]进行标准化,代码如下:
    """
    Author: Thinkgamer
    Desc:
    代码4-1 Python实现标准化方法
    """
    import numpy as np
    import math

    class DataNorm:
    def init(self):
    self.arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    self.x_max = max(self.arr) # 最大值
    self.x_min = min(self.arr) # 最小值
    self.x_mean = sum(self.arr) / len(self.arr) # 平均值
    self.x_std = np.std(self.arr) # 标准差

    def Min_Max(self):
        arr_ = list()
        for x in self.arr:
            # round(x,4) 对x保留4位小数
            arr_.append(round((x - self.x_min) / (self.x_max - self.x_min), 4))
        print("经过Min_Max标准化后的数据为:
    {}".format(arr_))
    
    def Z_Score(self):
        arr_ = list()
        for x in self.arr:
            arr_.append(round((x - self.x_mean) / self.x_std, 4))
        print("经过Z_Score标准化后的数据为:
    {}".format(arr_))
    
    # 有点问题,改为如下这样
    # def DecimalScaling(self):
    #     arr_ = list()
    #     j = self.x_max // 10 if self.x_max % 10 == 0 else self.x_max // 10 + 1
    #     for x in self.arr:
    #         arr_.append(round(x / math.pow(10, j), 4))
    #     print("经过Decimal Scaling标准化后的数据为:
    {}".format(arr_))
    def DecimalScaling(self):
        arr_ = list()
        j = 1
        x_max = max([abs(one) for one in self.arr])
        while x_max / 10 >= 1.0:
            j += 1
            x_max = x_max / 10
        for x in self.arr:
            arr_.append(round(x / math.pow(10, j), 4))
        print("经过Decimal Scaling标准化后的数据为:
    {}".format(arr_))
    
    def Mean(self):
        arr_ = list()
        for x in self.arr:
            arr_.append(round((x - self.x_mean) / (self.x_max - self.x_min), 4))
        print("经过均值标准化后的数据为:
    {}".format(arr_))
    
    def Vector(self):
        arr_ = list()
        for x in self.arr:
            arr_.append(round(x / sum(self.arr), 4))
        print("经过向量标准化后的数据为:
    {}".format(arr_))
    
    def exponential(self):
        arr_1 = list()
        for x in self.arr:
            arr_1.append(round(math.log10(x) / math.log10(self.x_max), 4))
        print("经过指数转换法(log10)标准化后的数据为;
    {}".format(arr_1))
    
        arr_2 = list()
        sum_e = sum([math.exp(one) for one in self.arr])
        for x in self.arr:
            arr_2.append(round(math.exp(x) / sum_e, 4))
        print("经过指数转换法(SoftMax)标准化后的数据为;
    {}".format(arr_2))
    
        arr_3 = list()
        for x in self.arr:
            arr_3.append(round(1 / (1 + math.exp(-x)), 4))
        print("经过指数转换法(Sigmoid)标准化后的数据为;
    {}".format(arr_3))
    

    if name == "main":
    dn = DataNorm()
    dn.Min_Max()
    dn.Z_Score()
    dn.DecimalScaling()
    dn.Mean()
    dn.Vector()
    dn.exponential()

    在实现数据标准化中,使用round函数来进行小数后数据位数的保留,如round(x,4)表示的是保留小数点后4位小数

  • 相关阅读:
    Java_io_02_从一个目录拷贝文件到另一个目录下
    JavaUtil_02_二维码的生成与解析
    Oracle_Exception_01_The Network Adapter could not establish the connection
    Linux_笔记_01_设置静态IP与 SecureCRT连接Linux
    Mybatis_笔记_01_逆向工程
    Java企业微信开发_Exception_02_java.security.InvalidKeyException: Illegal key size
    Java_总结_00_资源贴
    Java企业微信开发_06_素材管理之上传本地临时素材文件至微信服务器
    Java企业微信开发_05_消息推送之被动回复消息
    Java企业微信开发_04_消息推送之发送消息(主动)
  • 原文地址:https://www.cnblogs.com/zhaop8078/p/13701018.html
Copyright © 2011-2022 走看看