數(shù)據(jù)預(yù)處理

使用 make_blobs 生成數(shù)據(jù)集,指定樣本數(shù)據(jù)量 n_samples=40,分類 centers=2,隨機(jī)狀態(tài) random_state=50,標(biāo)準(zhǔn)差 cluster_std=2。

一、使用 StandardScaler 進(jìn)行數(shù)據(jù)預(yù)處理

數(shù)據(jù)預(yù)處理代碼如下:

#數(shù)據(jù)預(yù)處理
import numpy
import matplotlib.pyplot as plt #導(dǎo)入畫圖工具
from sklearn.datasets import make_blobs #導(dǎo)入數(shù)據(jù)集生成工具
from sklearn.preprocessing import StandardScaler

X , y = make_blobs(n_samples=40, centers=2,random_state=50,cluster_std=2)

#1.使用 StandardScaler 進(jìn)行數(shù)據(jù)預(yù)處理
X_1 = StandardScaler().fit_transform(X)
#設(shè)定子圖形的個(gè)數(shù)和排列方式
fig, sub = plt.subplots(1, 2 ,figsize = (10, 3))

#設(shè)置圖題
titles = ('make_blobs datas',
          'after StandardScaler')
Xs = [X,X_1]
#散點(diǎn)圖繪制數(shù)據(jù)點(diǎn)
for X, title, ax in zip(Xs, titles, sub.flatten()):
    ax.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', s=60)
    ax.set_title(title)

plt.show()

執(zhí)行結(jié)果為:


9.1StandardScaler.png

可見(jiàn),
數(shù)據(jù)預(yù)處理前,樣本的2個(gè)特征分貝對(duì)應(yīng)x軸和y軸,特征1 的數(shù)值大約在 -8~7之間,特征2的數(shù)值大約在 -10~0之間;
數(shù)據(jù)預(yù)處理后,數(shù)據(jù)點(diǎn)的分布沒(méi)有什么不同,但是x和y軸發(fā)生了變化,所有的特征1的數(shù)值都在-2~3之間,特征2的數(shù)值大約在 -3~2之間。
這是因?yàn)椋?strong>StandardScaler 的原理是,將所有數(shù)據(jù)的特征值轉(zhuǎn)換為均值為0,方差為1 的狀態(tài),這樣 就可以確保數(shù)據(jù)的“大小”是一致的。

二、使用 MinMaxScaler 進(jìn)行數(shù)據(jù)預(yù)處理

#數(shù)據(jù)預(yù)處理
import numpy
import matplotlib.pyplot as plt #導(dǎo)入畫圖工具
from sklearn.datasets import make_blobs #導(dǎo)入數(shù)據(jù)集生成工具
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
X , y = make_blobs(n_samples=40, centers=2,random_state=50,cluster_std=2)

#2.使用 MinMaxScaler 進(jìn)行數(shù)據(jù)預(yù)處理
X_2 = MinMaxScaler().fit_transform(X)
#設(shè)定子圖形的個(gè)數(shù)和排列方式
fig1, sub1 = plt.subplots(1, 2 ,figsize = (10, 3))

#設(shè)置圖題
titles1 = ('make_blobs datas',
          'after MinMaxScaler')
Xs1 = [X,X_2]
#散點(diǎn)圖繪制數(shù)據(jù)點(diǎn)
for X, title, ax in zip(Xs1, titles1, sub1.flatten()):
    ax.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', s=60)
    ax.set_title(title)

plt.show()

執(zhí)行結(jié)果為:


9.1MinMaxScaler.png

對(duì)比之前的原數(shù)據(jù)和經(jīng)過(guò) StandardScaler 后的數(shù)據(jù),可以看到,經(jīng)過(guò) MinMaxScaler 預(yù)處理的數(shù)據(jù)兩個(gè)特征值都被轉(zhuǎn)換到 0到1之間。

三、使用 RobustScaler 進(jìn)行數(shù)據(jù)預(yù)處理

#數(shù)據(jù)預(yù)處理
import numpy
import matplotlib.pyplot as plt #導(dǎo)入畫圖工具
from sklearn.datasets import make_blobs #導(dǎo)入數(shù)據(jù)集生成工具
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import RobustScaler

X , y = make_blobs(n_samples=40, centers=2,random_state=50,cluster_std=2)

#3.使用 RobustScaler 進(jìn)行數(shù)據(jù)預(yù)處理
X_3 = RobustScaler().fit_transform(X)
#設(shè)定子圖形的個(gè)數(shù)和排列方式
fig2, sub2 = plt.subplots(1, 2 ,figsize = (10, 3))

#設(shè)置圖題
titles2 = ('make_blobs datas',
          'after RobustScaler')
Xs2 = [X,X_3]
#散點(diǎn)圖繪制數(shù)據(jù)點(diǎn)
for X, title, ax in zip(Xs2, titles2, sub2.flatten()):
    ax.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', s=60)
    ax.set_title(title)

plt.show()

執(zhí)行結(jié)果為:


9.1RobustScaler.png

RobustScaler 與 StandardScaler 類似,但是更加“粗暴”,會(huì)直接把一些異常值踢出去。從圖中可以看到,特征1 的數(shù)值控制在 -1.5~2之間,特征2的數(shù)值控制在 -2~1.5 之間。

四、使用 Normalizer 進(jìn)行數(shù)據(jù)預(yù)處理

Normalizer 將所有樣本的特征向量轉(zhuǎn)化為歐幾里得距離為1,也就是說(shuō)它把數(shù)據(jù)的分布變成一個(gè)半徑為1 的圓,或者一個(gè)球。Normalizer通常是在我們只想保留數(shù)據(jù)特征向量的方向,而忽略其數(shù)值的時(shí)候用。

執(zhí)行結(jié)果為:


9.1Normalizer.png

五、以上預(yù)處理對(duì)比

9.1all.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容