使用 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é)果為:

可見(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é)果為:

對(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é)果為:

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é)果為:

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