首頁 > 軟體

Python實現歸一化演演算法詳情

2022-03-18 19:00:15

1.前言                                 

歸一化演演算法Normalization將資料處理成量綱一直的資料,一般限定在[0,1]、[-1,1]
一般在進行建模的時候需要進行資料歸一化處理,

原因如下:

  • 降低計算難度
  • 有可能提高模型的預測精度
  • 消除量綱影響

下面介紹三種常見的標準化方法,分別是最大最小值、正態中心化、小數點定標

2.Min-Max方法

2.1 公式

2.2 演演算法實現邏輯

  • 1.找一組資料的最大最小值
  • 2.利用公式歸一化
  • 3.輸入結果(為了方便視覺化展示,我們設計了程式碼)

2.3 程式碼

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 1.最小最大標準化
Data = np.array([[0.2,0.9,29],
                [0.9,0.1,100],
                [0.5,0.5,30]]) #最小-最大歸一化演演算法
# 1.1資料轉化
def MinMax(data):
    min = 0
    max = 1
    C = data[:,2]
    min = np.min(C)
    max = np.max(C)
    for one in data:
        one[2] = (one[2]-min) / (max-min)
    print('轉化後的矩陣:n',data)
    return data


# 1.2視覺化
def ShowData(Data,ShowD1):
    length = len(Data)
    X = np.ones(Data.shape[0])
    plt.figure(1)
    plt.subplot(121)
    for i in range(length):
        plt.scatter(X*(i+1),Data[:,i])
    plt.subplot(122)
    for i in range(length):
        plt.scatter(X*(i+1),ShowD1[:,i])
    plt.show()
ShowData(Data,MinMax(Data.copy()))

轉化後的矩陣:

 [[0.2        0.9        0.        ]
 [0.9        0.1        1.        ]
 [0.5        0.5        0.01408451]]

2.4侷限

  • 資料規模過大不適應
  • 資料歸一化後範圍在[0,1],對於一些有負有正數的原始資料慎用

3 Z-score標準化

3.1 公式

3.2 演演算法實現邏輯

  • 輸入資料
  • 求取資料的均值、方法,在利用中心化公式計算
  • 輸出結果

3.3 程式碼

def Zscore(data):
    x_mean = np.mean(data[:2])
    length = len(data[:,2])
    vari = np.sqrt((np.sum((data[:2]-x_mean)**2))/length)
    print('方差:',vari)
    data[:,2] = (data[:,2]-x_mean)/vari
    print('Z-score標準化後的矩陣是',data)
    return data

ShowData(Data,Zscore(Data.copy()))

方差: 51.569160680908254
Z-score標準化後的矩陣是 [[0.2        0.9        0.13864876]
 [0.9        0.1        1.5154406 ]
 [0.5        0.5        0.15804019]]

3.4 侷限

  • 對樣本量少的資料,表現不好
  • 標準化後範圍在有負有正,範圍在[-1,1]

4 小數定標法

4.1 公式

4.2 演演算法實現邏輯

  • 輸入資料
  • 絕對值化,最大值
  • 將每個數除以最大值的數量級
  • 輸入資料

4.3 程式碼實現

# 小數定標歸一化演演算法
def Decimals(data):
    C = np.abs(data[:,2])
    max = int(np.sort(C)[-1]) # 按從小到大排序,取最後一位,及最大值
    k = len(str(max))
    print('絕對值最大的位數:n',k)
    data[:2] = data[:,2] /(10**k)
    print('小數點定標準化後的矩陣:n',data)
    return data
ShowData(Data,Decimals(Data.copy()))

絕對值最大的位數:

 3

小數點定標準化後的矩陣:

 [[2.9e-02 1.0e-01 3.0e-02]
 [2.9e-02 1.0e-01 3.0e-02]
 [5.0e-01 5.0e-01 3.0e+01]]

4.4 侷限

  • 受到最大值影響較大

到此這篇關於Python實現歸一化演演算法詳情的文章就介紹到這了,更多相關Python歸一化演演算法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com