溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python如何實現(xiàn)歸一化算法

發(fā)布時間:2022-03-19 09:02:45 來源:億速云 閱讀:304 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Python如何實現(xiàn)歸一化算法的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1.前言                                 

歸一化算法Normalization將數(shù)據(jù)處理成量綱一直的數(shù)據(jù),一般限定在[0,1]、[-1,1]
一般在進(jìn)行建模的時候需要進(jìn)行數(shù)據(jù)歸一化處理,

原因如下:

  • 降低計算難度

  • 有可能提高模型的預(yù)測精度

  • 消除量綱影響

下面介紹三種常見的標(biāo)準(zhǔn)化方法,分別是最大最小值、正態(tài)中心化、小數(shù)點定標(biāo)

2.Min-Max方法

2.1 公式

Python如何實現(xiàn)歸一化算法

2.2 算法實現(xiàn)邏輯

  • 1.找一組數(shù)據(jù)的最大最小值

  • 2.利用公式歸一化

  • 3.輸入結(jié)果(為了方便可視化展示,我們設(shè)計了代碼)

2.3 代碼

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

# 1.最小最大標(biāo)準(zhǔn)化
Data = np.array([[0.2,0.9,29],
                [0.9,0.1,100],
                [0.5,0.5,30]]) #最?。畲髿w一化算法
# 1.1數(shù)據(jù)轉(zhuǎn)化
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('轉(zhuǎn)化后的矩陣:\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()))

轉(zhuǎn)化后的矩陣:

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

Python如何實現(xiàn)歸一化算法

2.4局限

  • 數(shù)據(jù)規(guī)模過大不適應(yīng)

  • 數(shù)據(jù)歸一化后范圍在[0,1],對于一些有負(fù)有正數(shù)的原始數(shù)據(jù)慎用

3 Z-score標(biāo)準(zhǔn)化

3.1 公式

Python如何實現(xiàn)歸一化算法

3.2 算法實現(xiàn)邏輯

  • 輸入數(shù)據(jù)

  • 求取數(shù)據(jù)的均值、方法,在利用中心化公式計算

  • 輸出結(jié)果

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標(biāo)準(zhǔn)化后的矩陣是',data)
    return data

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

方差: 51.569160680908254
Z-score標(biāo)準(zhǔn)化后的矩陣是 [[0.2        0.9        0.13864876]
 [0.9        0.1        1.5154406 ]
 [0.5        0.5        0.15804019]]

Python如何實現(xiàn)歸一化算法

3.4 局限

  • 對樣本量少的數(shù)據(jù),表現(xiàn)不好

  • 標(biāo)準(zhǔn)化后范圍在有負(fù)有正,范圍在[-1,1]

4 小數(shù)定標(biāo)法

4.1 公式

Python如何實現(xiàn)歸一化算法

4.2 算法實現(xiàn)邏輯

  • 輸入數(shù)據(jù)

  • 絕對值化,最大值

  • 將每個數(shù)除以最大值的數(shù)量級

  • 輸入數(shù)據(jù)

4.3 代碼實現(xiàn)

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

絕對值最大的位數(shù):

 3

小數(shù)點定標(biāo)準(zhǔn)化后的矩陣:

 [[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]]

Python如何實現(xiàn)歸一化算法

4.4 局限

  • 受到最大值影響較大

以上就是“Python如何實現(xiàn)歸一化算法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI