标签: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