python 标准化_数据标准化
常見的數據標準化方法有以下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位小數
總結
以上是生活随笔為你收集整理的python 标准化_数据标准化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eval在python中是什么意思_如何
- 下一篇: 新手入门python的注意事项_【新手入