機器學習 資料歸一化(Scaler)

2022-03-22 01:36:58 字數 4074 閱讀 8335

1)最值歸一化(normalization)

1、思路:把所有資料對映到0~1之間;

2、公式:

# x為資料集中每一種特徵的值;

# 將資料集中的每一種特徵都做對映;

3、特點:多適用於分布有明顯邊界的情況;如考試成績、人的身高、顏色的分布等,都有範圍;而不是些沒有範圍約定,或者範圍非常大的資料;

# 明顯邊界:同一特徵的資料大小相差不大;不會出現大部分資料在0~200之間,有個別資料在100000左右;

4、缺點:受outlier影響較大;

2)z-score(standardization)

1、思路:把所有資料歸一到均值為0方差為1的分布中;

2、公式:xscale = (x - xmean ) / σ

# xmean:特徵的均值(均值就是平均值);

# σ:每組特徵值的標準差;

# x:每乙個特徵值;

# xscale:歸一化後的特徵值;

3、特點1:使用於資料分布沒有明顯的邊界;(有可能存在極端的資料值)

# 歸一化後,資料集中的每一種特徵的均值為0,方差為1;

4、優點(相對於最值歸一化):即使原資料集中有極端值,歸一化有的資料集,依然滿足均值為0方差為1,不會形成乙個有偏的資料;

1)最值歸一化:

import

numpy as np

#對一維向量做歸一化

x = np.random.randint(0, 100, size = 100)

x = np.array(x, dtype=float)

x = (x - np.min(x)) / (np.max(x) -np.min(x))

#對二維矩陣做歸一化

x = np.random.randint(0, 100, (50, 2))

x = np.array(x, dtype=float)

#分別對每一列進行最值歸一化,方式與向量做最值歸一化一樣

2)均值方差歸一化:

import

numpy as np

x2 = np.random.randint(0, 100, (50, 2))

x2 = np.array(x2, dtype=float)

x2[:,0] = (x2[:,0] - np.mean(x2[:,0])) /np.std(x2[:,0])

x2[:,1] = (x2[:,1] - np.mean(x2[:,1])) / np.std(x2[:,1])

# np.mean(array):求向量的平均值;

# np.std(array):求向量的標準差;

1)問題

2)方案

3)原因

# 對資料的歸一化也是演算法的一部分;

4)方式

x_test:測試資料集;

mean_train:訓練資料集的均值;

std_train:訓練資料集的標準差;

1)呼叫的步驟

fit:根據訓練資料集獲取均值和方差,scikit-learn中返回乙個scalar物件;

transform:對訓練資料集、測試資料集進行歸一化;

2)**實現

import

numpy as np

from sklearn import

datasets

iris =datasets.load_iris()

x =iris.data

y =iris.target

#1)歸一化前,將原始資料分割

from alg.train_test_split import

train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, seed = 666)

#2)匯入均值方差歸一化模組:standardscaler

from sklearn.preprocessing import

standardscaler

#例項化,不需要傳入引數

standardscaler =standardscaler()

#3)fit過程:返回standardscaler物件,物件內包含訓練資料集的均值和方差

#fit過程,傳入訓練資料集;

standardscaler.fit(x_train)

#輸出:standardscaler(copy=true, with_mean=true, with_std=true)

#fit後可通過standardscaler檢視均值和標準差

#standardscaler.mean_:檢視均值

#standardscaler.scale_:檢視標準差

#4)transform:對訓練資料集和測試資料集進行歸一化,分別傳入對應的資料集

#歸一化並沒有改變訓練資料集,而是又生成乙個新的矩陣,除非將新生成的資料集賦給原資料集,一般不改變原資料

x_train_standard =standardscaler.transform(x_train)

x_test_standard =standardscaler.transform(x_test)

#接下來就是使用歸一化後的資料集訓練並測試模型

3)注意

步驟:資料分割——匯入並例項化歸一化模組——fit(得到均值和方差)——transform(得到歸一化後的資料集);

例項化standardscaler()時,不需要傳入引數;

歸一化並沒有改變資料集,而是又生成乙個新的矩陣,一般不要改變原資料;

4)實現scikit-learn的standardscaler類中的內部邏輯

import

numpy as np

class

standardscaler:

def__init__

(self):

self.mean_ =none

self.scale_ =none

deffit(self, x):

"""根據訓練資料集獲取均值和標準差

"""assert x.ndim == 2,"

the dimension of x must be 2

"self.mean_ = np.array([np.mean(x[:,i]) for i in range(0,x.shape[1])])

self.scale_ = np.array([np.std(x[:,i]) for i in range(0,x.shape[1])])

return

self

deftransform(self, x):

"""將x根據這個standardscaler進行均值方差歸一化處理

"""assert x_train.ndim == 2, "

the dimension of x_train must be 2

"assert self.mean_ is

not none and self.scale_ is

notnone,\

"must fit before transform

"assert x.shape[1] ==len(self.mean_),\

"the feature number of x must be equal to mean_ and std_

"reasx = np.empty(shape=x.shape, dtype=float)

for col in range(x.shape[1]):

resx[:,col] = (x[:,col] - self.mean_[col]) /self.scale_[col]

return resx

機器學習 資料歸一化

機器學習中,在資料預處理過程中,通過將資料歸一化可以加快梯度下降求最優解的速度,也有可能提高模型計算的精度。常用的歸一化方法主要有兩種 最值歸一化。比如把最大值歸一化成1,最小值歸一化成 1 或把最大值歸一化成1,最小值歸一化成0。適用於本來就分布在有限範圍內的資料。其中常用的方法有 線性比例變換法...

機器學習 資料歸一化方法

原文 本文主要介紹兩種基本的資料歸一化方法。歸一化方法有兩種形式,一種是把數變為 0,1 之間的小數,一種是把有量綱表示式變為無量綱表示式。資料標準化 歸一化 處理是資料探勘的一項基礎工作,不同評價指標往往具有不同的量綱和量綱單位,這樣的情況會影響到資料分析的結果,為了消除指標之間的量綱影響,需要進...

機器學習之資料歸一化

機器學習中,資料歸一化是非常重要,如果不進行資料歸一化,可能會導致模型壞掉或者訓練出乙個奇怪的模型。現在有乙個訓練資料集,包含兩個樣本,內容如下 腫瘤大小 cm 發現時間 day 樣本11 200樣本2 5100 以 k 近鄰演算法為例,發現時間 的數值比 腫瘤大小 的數值大很多,樣本間的距離被 發...