tft每日頭條

 > 科技

 > python數據标準化的含義

python數據标準化的含義

科技 更新时间:2025-01-22 18:53:31

主要内容:

  • 什麼是數據标準化?在Python中如何進行數據标準化?

一、Z标準化:實現中心化和正态分布;

二、Min-Max:歸一化;

三、MaxAbs:最大絕對值标準化;

四、RobustScaler。

  • Python實例

z-score;

Min-Max;

MaxAbs;

RobustScaler。

數據标準化是數據預處理中非常重要的一步。在實際應用過程中,我們經常會遇到含有多種特征的數據集,這些特征常常有着不同的分布形态和區間,有着不同的量級(量綱),這很容易對我們的模型訓練産生影響。而數據标準化,就是為了消除規模、特征和分布差異對模型的影響而存在。

另外,将各特征标準化之後,我們可以對其進行加權組合,從而生成新的指标,而原始數據往往不支持我們直接進行加權計算。

那麼今天我們就來看一下,有哪些數據标準化的方法,以及它們分别如何在Python中實現。

一、Z标準化:實現中心化和正态分布

Z-Score标準化是基于原始數據的均值和标準差進行的标準化,其轉化公式為:

python數據标準化的含義(什麼是數據标準化)1

其中,z是轉化後的數據,x為轉化前的數據,μ是整組數據的均值,σ是整組數據的标準差。

這種方法适合大多數類型的數據,其應用非常廣泛。從公式裡我們就可以看出來,轉化之後其均值将變為0,而方差和标準差将變為1(考慮方差的公式),這部分如果不明白那就不妨在本子上推理一下哦。

二、Min-Max:歸一化

Min-Max标準化方法會對原始數據進行線性變換,它的轉換公式為:

python數據标準化的含義(什麼是數據标準化)2

很明顯,當x為最大值時,會被轉換為1;當x為最小值時,對應的新值為0;整組數據會分布在從0到1的區間内,而數據的分布形态并不會發生變化。

三、MaxAbs:最大絕對值标準化

在數據科學中,我們經常需要應對稀疏數據,MaxAbs方法對于稀疏數據有着良好的支持。MaxAbs标準化方法與Min-Max方法有些相似,其公式為:

python數據标準化的含義(什麼是數據标準化)3

即用每一個值除以整組數據中的絕對值的最大值,這樣保留了原有數據的正負屬性,且使數據落在了[-1,1]閉區間内。需要注意的是,先進行絕對值操作,然後選最大值,而不是先選擇最大值,再求絕對值。我已經看到過很多文章把這裡弄錯了。舉個例子,有一組數據[-0.01, -1, -2],如果我們先求最大值再求絕對值,别說歸一化了,數據簡直要鑽到地縫裡去了。

四、RobustScaler

有些時候,數據中會存在離群點(異常值)。這時如果我們使用z-score标準化就會導緻數據很容易失去離群特征。這時我們就可以使用RobustScaler方法,它對于數據中心化和數據的縮放健壯性有着更強的參數調節能力。

Python實例

多說無益,放碼過來,我們先導入必要的庫、iris數據集,并進行一些必要的設置。

import numpy as np import pandas as pd from sklearn import preprocessing import matplotlib.pyplot as plt import matplotlib as mpl import seaborn as sns from seaborn import load_dataset sns.set() mpl.rcParams['font.family'] = 'sans-serif' mpl.rcParams['font.sans-serif'] = 'SimHei' iris = load_dataset('iris').drop('species', axis=1) iris.head()

python數據标準化的含義(什麼是數據标準化)4

我們先觀察下前兩列數據的原始分布情況:

sns.jointplot(data=iris, color='m', x='sepal_length', y='sepal_width');

python數據标準化的含義(什麼是數據标準化)5

Z-score

我們先來演示z标準化。

z_scaler = preprocessing.StandardScaler() iris_z = z_scaler.fit_transform(iris) iris_z = pd.DataFrame(iris_z) sns.jointplot(data=iris_z, color='m', x=0, y=1);

可以看到,數據分布形态變化不大,但是數據收斂到了0軸周圍。

python數據标準化的含義(什麼是數據标準化)6

我們看一下轉換後數據的均值和标準差:

python數據标準化的含義(什麼是數據标準化)7

可以看到,雖然有一點點小誤差(量級非常小),但是數據基本上是符合均值為0、标準差為1的。

Min-Max标準化

然後是Min-Max歸一化方法:

mm_scaler = preprocessing.MinMaxScaler() iris_mm = mm_scaler.fit_transform(iris) iris_mm = pd.DataFrame(iris_mm) sns.jointplot(data=iris_mm, color='m', x=0, y=1);

python數據标準化的含義(什麼是數據标準化)8

這次我們在保持原有數據分布特性的同時,将數據收斂到了0到1之間。

MaxAbs标準化

ma_scaler = preprocessing.MaxAbsScaler() iris_ma = ma_scaler.fit_transform(iris) iris_ma = pd.DataFrame(iris_ma) sns.jointplot(data=iris_ma, color='m', x=0, y=1);

python數據标準化的含義(什麼是數據标準化)9

由于iris數據集裡沒有負值,所以這裡不能體現出[-1,1]的數據範圍。我們為數據增加一些負值來看看:

iris_ma = pd.concat([iris_ma, iris_ma.applymap(lambda x: -x)]) sns.jointplot(data=iris_ma, color='m', x=0, y=1);

python數據标準化的含義(什麼是數據标準化)10

果然是[-1,1]呢,不過我們這裡的操作隻是為了演示,沒有額外的意義。

RobustScaler

r_scaler = preprocessing.RobustScaler() iris_r = ma_scaler.fit_transform(iris) iris_r = pd.DataFrame(iris_r) sns.jointplot(data=iris_r, color='m', x=0, y=1);

python數據标準化的含義(什麼是數據标準化)11

嗯……看起來跟MaxAbs沒什麼區别,這是因為這裡不存在什麼異常值。這個就留給你們自己來練習一下了!

以上是使用sklearn提供的标準化工具進行數據标準化的操作,事實上,我們也完全可以自己創造一些标準化工具,實際操作起來并不難哦,大家可以嘗試一下。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved