柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)挖掘之歸一化
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)挖掘之歸一化
歸一化(Normalization)的概念
在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中,歸一化(Normalization)是一個(gè)常見的數(shù)據(jù)預(yù)處理技術(shù)。歸一化的目的是將數(shù)據(jù)特征縮放到一個(gè)共同的尺度上,以便于后續(xù)的分析和建模。
歸一化也稱為最小-最大規(guī)范化 公式:
x
′
=
x
?
m
i
n
(
x
)
m
a
x
(
x
)
?
m
i
n
(
x
)
x' = \frac{x - min(x)}{max(x) - min(x)}
x′=max(x)?min(x)x?min(x)? 其中
x
′
x'
x′ 是歸一化后的數(shù)值,
x
x
x 是原始數(shù)值,
m
i
n
(
x
)
min(x)
min(x) 和
m
a
x
(
x
)
max(x)
max(x) 分別是特征的最小值和最大值 歸一化后,數(shù)據(jù)會(huì)被映射到 [0, 1] 區(qū)間內(nèi) 常用于需要限制數(shù)據(jù)在特定范圍內(nèi)的場(chǎng)景,如圖像處理、推薦系統(tǒng)等 舉個(gè)例子,假設(shè)我們有一個(gè)特征"年齡",取值范圍為 [18, 65]。如果不進(jìn)行任何轉(zhuǎn)換,該特征在某些算法中可能會(huì)主導(dǎo)整個(gè)預(yù)測(cè)結(jié)果。而通過標(biāo)準(zhǔn)化或歸一化,我們可以將該特征值映射到一個(gè)標(biāo)準(zhǔn)的數(shù)值范圍,從而減少某些特征對(duì)模型的過度影響。
為什么需要?dú)w一化
。歸一化的目的就是將數(shù)據(jù)映射到 0-1 之間的范圍內(nèi)。
具體來說,歸一化的公式是:
其中:
x
′
x'
x′ 是歸一化后的數(shù)值
x
x
x 是原始數(shù)值
m
i
n
(
x
)
min(x)
min(x) 是該特征的最小值
m
a
x
(
x
)
max(x)
max(x) 是該特征的最大值 通過這個(gè)公式,我們可以將原始數(shù)據(jù)
x
x
x 從它的原始范圍
[
m
i
n
(
x
)
,
m
a
x
(
x
)
]
[min(x), max(x)]
[min(x),max(x)] 映射到
[
0
,
1
]
[0, 1]
[0,1] 的標(biāo)準(zhǔn)化范圍內(nèi)。
這種方法有以下優(yōu)點(diǎn):
消除特征之間量綱的差異,使得各個(gè)特征處于同一量級(jí)上。這對(duì)一些算法非常重要,比如基于距離度量的算法。 限制數(shù)據(jù)在 0-1 之間,對(duì)于一些算法如神經(jīng)網(wǎng)絡(luò)來說非常適合。因?yàn)樯窠?jīng)網(wǎng)絡(luò)的激活函數(shù)通常定義在 0-1 之間。 增加數(shù)值的穩(wěn)定性,避免某些特征由于量級(jí)過大而主導(dǎo)整個(gè)模型。
常用的歸一化方法
Min-Max歸一化(Min-Max Normalization)
也稱為線性歸一化或最小-最大歸一化。 將數(shù)據(jù)特征縮放到 [0, 1] 區(qū)間內(nèi)。 公式: x_norm = (x - min(x)) / (max(x) - min(x))
import numpy as np
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)矩陣
X = np.array([[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]])
# Min-Max歸一化
X_norm = (X - np.min(X, axis=0)) / (np.max(X, axis=0) - np.min(X, axis=0))
print(X_norm)
# 輸出:
# [[0. 0. 0. ]
# [0.33333333 0.25 0.25 ]
# [0.66666667 0.5 0.5 ]
# [1. 0.75 0.75 ]]
Z-score歸一化(Z-score Normalization)
也稱為標(biāo)準(zhǔn)化(Standardization)。 將數(shù)據(jù)特征縮放到均值為0、方差為1的標(biāo)準(zhǔn)正態(tài)分布。 公式: x_norm = (x - mean(x)) / std(x)
import numpy as np
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)矩陣
X = np.array([[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]])
# Z-score歸一化
X_norm = (X - np.mean(X, axis=0)) / np.std(X, axis=0)
print(X_norm)
# 輸出:
# [[-1.26491106 -1.26491106 -1.26491106]
# [-0.42163702 -0.42163702 -0.42163702]
# [0.42163702 0.42163702 0.42163702]
# [1.26491106 1.26491106 1.26491106]]
小數(shù)定標(biāo)歸一化(Decimal Scale Normalization)
將數(shù)據(jù)特征縮放到 [-1, 1] 區(qū)間內(nèi)。 公式: x_norm = x / 10^j,其中 j 是使得 max(|x_norm|) < 1 的最小整數(shù)。
import numpy as np
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)矩陣
X = np.array([[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]])
# 小數(shù)定標(biāo)歸一化
j = int(np.log10(np.max(np.abs(X))))
X_norm = X / (10 ** j)
print(X_norm)
# 輸出:
# [[0.01 1. 0.1 ]
# [0.02 2. 0.2 ]
# [0.03 3. 0.3 ]
# [0.04 4. 0.4 ]]
Log歸一化(Log Normalization)
對(duì)數(shù)據(jù)進(jìn)行對(duì)數(shù)變換,將數(shù)據(jù)特征轉(zhuǎn)換到對(duì)數(shù)尺度上。 公式: x_norm = log(1 + x)
import numpy as np
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)矩陣
X = np.array([[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]])
# Log歸一化
X_norm = np.log1p(X)
print(X_norm)
# 輸出:
# [[0. 4.60517019 2.30258509]
# [0.69314718 5.29831939 2.99573227]
# [1.09861229 5.70378255 3.40119738]
# [1.38629436 5.99146113 3.6888794 ]]
sigmoid歸一化(Sigmoid Normalization)
將數(shù)據(jù)特征縮放到 (0, 1) 區(qū)間內(nèi)。 公式: x_norm = 1 / (1 + exp(-x))
import numpy as np
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)矩陣
X = np.array([[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]])
# Sigmoid歸一化
X_norm = 1 / (1 + np.exp(-X))
print(X_norm)
# 輸出:
# [[0.73105858 0.73105858 0.73105858]
# [0.88079708 0.88079708 0.88079708]
# [0.95257413 0.95257413 0.95257413]
# [0.98201379 0.98201379 0.98201379]]
Softmax歸一化(Softmax Normalization)
將數(shù)據(jù)特征縮放到 (0, 1) 區(qū)間內(nèi),且所有特征值之和為1。 公式: x_norm = exp(x) / sum(exp(x))
import numpy as np
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)矩陣
X = np.array([[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]])
# Softmax歸一化
X_norm = np.exp(X) / np.sum(np.exp(X), axis=1, keepdims=True)
print(X_norm)
# 輸出:
# [[0.01798621 0.73221631 0.25979748]
# [0.01798621 0.73221631 0.25979748]
# [0.01798621 0.73221631 0.25979748]
# [0.01798621 0.73221631 0.25979748]]
常用模塊
sklearn.preprocessing
這個(gè)模塊包含了許多常見的數(shù)據(jù)預(yù)處理方法,其中就包括Min-Max歸一化、Z-score歸一化等。下面是一個(gè)例子:
from sklearn.preprocessing import MinMaxScaler
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)矩陣
X = [[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]]
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)
print(X_normalized)
# 輸出:
# [[0. 0. 0. ]
# [0.33333333 0.25 0.25 ]
# [0.66666667 0.5 0.5 ]
# [1. 0.75 0.75 ]]
numpy
NumPy提供了一些基本的歸一化函數(shù),比如可以使用(x - x.min()) / (x.max() - x.min())實(shí)現(xiàn)Min-Max歸一化。下面是一個(gè)例子:
import numpy as np
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)矩陣
X = np.array([[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]])
X_normalized = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
print(X_normalized)
# 輸出:
# [[0. 0. 0. ]
# [0.33333333 0.25 0.25 ]
# [0.66666667 0.5 0.5 ]
# [1. 0.75 0.75 ]]
torchvision.transforms
在PyTorch中,torchvision.transforms模塊提供了一些常用的數(shù)據(jù)預(yù)處理方法,包括歸一化操作。下面是一個(gè)例子:
import torch
from torchvision.transforms import Normalize
# 假設(shè)我們有一個(gè)4x3的數(shù)據(jù)張量
X = torch.tensor([[1, 100, 10],
[2, 200, 20],
[3, 300, 30],
[4, 400, 40]])
normalize = Normalize(mean=[0, 0, 0], std=[1, 1, 1])
X_normalized = normalize(X)
print(X_normalized)
# 輸出:
# [[-1. -1. -1. ]
# [-0.33333333 -0.33333333 -0.33333333]
# [0.33333333 0.33333333 0.33333333]
# [1. 1. 1. ]]
應(yīng)用場(chǎng)景
特征工程
在構(gòu)建機(jī)器學(xué)習(xí)模型時(shí),將不同量綱的特征進(jìn)行歸一化處理可以提高模型的收斂速度和性能。這是因?yàn)闅w一化能夠消除特征之間的量綱差異,使得各個(gè)特征對(duì)模型訓(xùn)練的貢獻(xiàn)更加均衡。
數(shù)據(jù)預(yù)處理
在很多數(shù)據(jù)分析任務(wù)中,原始數(shù)據(jù)往往具有不同的量綱和分布。進(jìn)行歸一化處理可以將數(shù)據(jù)映射到一個(gè)標(biāo)準(zhǔn)的范圍內(nèi),有利于后續(xù)的統(tǒng)計(jì)分析、可視化和模型構(gòu)建。
異常檢測(cè)
異常值檢測(cè)是一個(gè)典型的應(yīng)用場(chǎng)景。通過對(duì)數(shù)據(jù)進(jìn)行歸一化,可以更好地識(shí)別出偏離正常范圍的異常點(diǎn),為異常檢測(cè)提供基礎(chǔ)。
聚類算法
很多聚類算法,如K-Means、層次聚類等,都需要事先對(duì)數(shù)據(jù)進(jìn)行歸一化處理,以確保不同特征對(duì)聚類結(jié)果的影響是均衡的。
推薦系統(tǒng)
在推薦系統(tǒng)中,用戶對(duì)不同類型商品的評(píng)分往往具有不同的尺度。通過對(duì)評(píng)分?jǐn)?shù)據(jù)進(jìn)行歸一化,可以更準(zhǔn)確地衡量用戶偏好,從而提高推薦的精度。
深度學(xué)習(xí)
在深度學(xué)習(xí)模型的訓(xùn)練中,歸一化技術(shù)也扮演著重要的角色。使用歸一化層可以加快模型的收斂速度,并提高模型的泛化性能。
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)挖掘之歸一化
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。