Python實(shí)現(xiàn)歸一化算法詳情
1.前言
歸一化算法Normalization將數(shù)據(jù)處理成量綱一直的數(shù)據(jù),一般限定在[0,1]、[-1,1]
一般在進(jìn)行建模的時(shí)候需要進(jìn)行數(shù)據(jù)歸一化處理,
原因如下:
- 降低計(jì)算難度
- 有可能提高模型的預(yù)測(cè)精度
- 消除量綱影響
下面介紹三種常見的標(biāo)準(zhǔn)化方法,分別是最大最小值、正態(tài)中心化、小數(shù)點(diǎn)定標(biāo)
2.Min-Max方法
2.1 公式

2.2 算法實(shí)現(xiàn)邏輯
- 1.找一組數(shù)據(jù)的最大最小值
- 2.利用公式歸一化
- 3.輸入結(jié)果(為了方便可視化展示,我們?cè)O(shè)計(jì)了代碼)
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]]

2.4局限
- 數(shù)據(jù)規(guī)模過大不適應(yīng)
- 數(shù)據(jù)歸一化后范圍在[0,1],對(duì)于一些有負(fù)有正數(shù)的原始數(shù)據(jù)慎用
3 Z-score標(biāo)準(zhǔn)化
3.1 公式

3.2 算法實(shí)現(xiàn)邏輯
- 輸入數(shù)據(jù)
- 求取數(shù)據(jù)的均值、方法,在利用中心化公式計(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]]

3.4 局限
- 對(duì)樣本量少的數(shù)據(jù),表現(xiàn)不好
- 標(biāo)準(zhǔn)化后范圍在有負(fù)有正,范圍在[-1,1]
4 小數(shù)定標(biāo)法
4.1 公式

4.2 算法實(shí)現(xiàn)邏輯
- 輸入數(shù)據(jù)
- 絕對(duì)值化,最大值
- 將每個(gè)數(shù)除以最大值的數(shù)量級(jí)
- 輸入數(shù)據(jù)
4.3 代碼實(shí)現(xiàn)
# 小數(shù)定標(biāo)歸一化算法
def Decimals(data):
? ? C = np.abs(data[:,2])
? ? max = int(np.sort(C)[-1]) # 按從小到大排序,取最后一位,及最大值
? ? k = len(str(max))
? ? print('絕對(duì)值最大的位數(shù):\n',k)
? ? data[:2] = data[:,2] /(10**k)
? ? print('小數(shù)點(diǎn)定標(biāo)準(zhǔn)化后的矩陣:\n',data)
? ? return data
ShowData(Data,Decimals(Data.copy()))絕對(duì)值最大的位數(shù):
3
小數(shù)點(diǎn)定標(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]]

4.4 局限
- 受到最大值影響較大
到此這篇關(guān)于Python實(shí)現(xiàn)歸一化算法詳情的文章就介紹到這了,更多相關(guān)Python歸一化算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用Python Beautiful?Soup解析HTML內(nèi)容
Beautiful Soup是一種Python的解析庫(kù),主要用于解析和處理HTML/XML內(nèi)容,詳細(xì)介紹Beautiful Soup的使用方式和應(yīng)用場(chǎng)景,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Python實(shí)現(xiàn)讀取文件夾按數(shù)字排序功能
這篇文章主要介紹了Python讀取文件夾按數(shù)字排序,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享
Bokeh是Python中的數(shù)據(jù)可視化庫(kù),提供高性能的交互式圖表和繪圖。本文將利用Bokeh繪制一些可視化圖表,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08
Python phone模塊獲取手機(jī)號(hào)歸屬地 區(qū)號(hào) 運(yùn)營(yíng)商等信息demo
Python直接使用plot()函數(shù)畫圖的方法實(shí)例

