データの標準化とPythonの実装

まず、原則
        データの正規化(正規化):特定のセルの間に入るように、データは、一定の割合でスケーリングされます。

データの正規化の種類:

  • 最小 - 最大の標準化
  • Zスコア標準(標準スコア、標準スコア)
  • フラクショナルスケーリング(小数点スケーリング)標準化
  • 正規化を意味
  • ベクトルの正規化
  • 変換指数

1、最小-Maxは標準
        最小・最大標準化された、生データは、線形変換を指し、[0,1]との間のマッピング値。

公式:

式中、Xは、x、元のデータである、元のデータの最小値であり、X maxは、元のデータの最大値です。

2、Zスコアの標準化

        また、標準的なスコア(スコア標準)として知られている、元のデータ(平均値)と標準偏差(標準偏差)の平均値に基づいて正規化されたデータを指します。

公式:

式中、Xは、元のデータである、μ元のデータの平均であり、σは、元のデータの標準偏差です。

図3は、フラクショナルスケーリング(Deciamlスケーリング)標準化は、
        小数点の位置を移動させることにより、データを標準化するための手段。小数点以下の桁は、元のデータの移動の最大絶対値に依存します。

公式:

 

xは、元のデータ10であり、jは、jはビット数の絶対値の最大値を表します。

例えば、アレイは、970の最大絶対値、すなわち、J = 3である場合、データは[-0.309、-0.01、-0.043に対して正規化され、今[-309、-10、-43、87、344、970]であります0.087、0.344、0.97]

図4は、正規化平均
        最大および最小のデータに対して正規化原データから平均値を意味します。

公式:

 

式中、Xは、生データであり、μ元のデータの平均であり、X 元のデータの最小値であり、X maxは、元のデータの最大値です。もちろん、可能分母X用の一部使用することを最大の代わりに。

図5は、ベクトル正規化は、
        すべてのデータの合計で除算された各データ値を介して生データを正規化するための手段。

公式:X ^ { '} = \ FRAC {X} {\ sum_ {i = 1} ^ {N}} X_I

 

ここで、xは生データであり、分母は、すべてのデータの合計です。

図6は、インデックス変換は、
        元のデータの値の指数関数により変換された対応する正規化されたデータを意味します。指数関数は、一般的な方法LG機能、ソフトマックス関数とSIGMOD機能を変換します。

公式:

(1)LG関数:

 X ^ { '} = \ FRAC {LG(X)} {LG(X_ {最大})}

式中、Xは、生データであるX_ {マックス}オリジナルデータの最大値。

(2)ソフトマックス関数:

 X ^ { '} = \ FRAC {E ^ X} {\ sum_ {i = 1} ^ {n}は、E ^ {X_I}}

式中、Xは、eは自然対数であり、分母はそれぞれデータインデックスの生データを示し、Eを求め、生データです。

(3)シグモイド関数:
X ^ { '} = \ FRAC {1} {1つの+ E ^ { -  X}}

第二に、データの標準化のためのコード

import numpy as np
import math
 
class DataNum:
    def __init__(self):
        self.arr = [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
        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)   # 标准差
        print("原始数据:\n{}".format(self.arr))
 
    def Min_Max(self):
        arr_ = list()
        distance = self.x_max-self.x_min
        for x in self.arr:
            arr_.append(round((x-self.x_min)/distance,4))   # 保留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))   # 保留4位小数
        print("DecimalScaling标准化结果:\n{}".format(arr_))
 
    def Mean(self):
        arr_ = list()
        distance = self.x_max - self.x_min
        for x in self.arr:
            arr_.append(round((x - self.x_mean) / distance, 4))  # 保留4位小数
        print("Mean标准化结果:\n{}".format(arr_))
 
    def Vector(self):
        arr_ = list()
        arr_sum = sum(self.arr)
        for x in self.arr:
            arr_.append(round(x / arr_sum, 4))  # 保留4位小数
        print("Vector标准化结果:\n{}".format(arr_))
 
    def exponential(self):
        arr_1 = list()  # lg
        arr_2 = list()  # SoftMax
        arr_3 = list()  # Sigmoid
        sum_e = sum([math.exp(x) for x in self.arr])
        for x in self.arr:
            arr_1.append(round(math.log10(x) / math.log10(self.x_max), 4))  # 保留4位小数
            arr_2.append(round(math.exp(x) / sum_e, 4))  # 保留4位小数
            arr_3.append(round(1 / (1+math.exp(-x)), 4))  # 保留4位小数
        print("lg标准化结果:\n{}".format(arr_1))
        print("SoftMax标准化结果:\n{}".format(arr_2))
         プリント" SIGMOD标准化结果:\ N {} " .format(arr_3))
 
    デフ行う(自己):
        dn.Min_Max()
        dn.Z_Score()
        dn.DecimalScaling()
        dn.Mean()
        dn.Vector()
        dn.exponential()
 
の場合 __name__ == ' __main__ ' 
    DN = DataNum()
    dn.do()

結果:

 

 

おすすめ

転載: www.cnblogs.com/SysoCjs/p/11595540.html