码迷,mamicode.com
首页 > 其他好文 > 详细

数据标准化

时间:2020-09-23 23:26:39      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:numpy   elf   最大值   ali   方法   lse   soft   sel   cto   

常见的数据标准化方法有以下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标准化后的数据为:\n{}".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标准化后的数据为:\n{}".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标准化后的数据为:\n{}".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标准化后的数据为:\n{}".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("经过均值标准化后的数据为:\n{}".format(arr_))

def Vector(self):
    arr_ = list()
    for x in self.arr:
        arr_.append(round(x / sum(self.arr), 4))
    print("经过向量标准化后的数据为:\n{}".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)标准化后的数据为;\n{}".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)标准化后的数据为;\n{}".format(arr_2))

    arr_3 = list()
    for x in self.arr:
        arr_3.append(round(1 / (1 + math.exp(-x)), 4))
    print("经过指数转换法(Sigmoid)标准化后的数据为;\n{}".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位小数

数据标准化

标签:numpy   elf   最大值   ali   方法   lse   soft   sel   cto   

原文地址:https://www.cnblogs.com/zhaop8078/p/13701018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!