簡體   English   中英

sklearn中的StandardScaler無法正確安裝,是嗎?

[英]StandardScaler in sklearn not fitting properly, or is it?

我正在使用sklearn StandardScalar縮放我的特征向量,但是它似乎不適合訓練特征向量。 也許這是預期的行為,但是如果是這樣,則有人可以解釋原因(最好也提供一些數學解釋)。

from sklearn.preprocessing import StandardScaler
import numpy as np

scale_inst = StandardScaler()

# train feature vector
x1 = np.array([1, 2, 10, 44, 55])
# test feature vector
x2 = np.array([1, 2, 10, 44, 667])

# first I fit
scale_inst.fit(x1)
# than I transform training vector and test vector
print scale_inst.transform(x1)
print scale_inst.transform(x2)

# OUTPUT
[-0.94627295 -0.90205459 -0.54830769  0.95511663  1.44151861]
[ -0.94627295  -0.90205459  -0.54830769   0.95511663  28.50315638]

為什么將其從667縮放到28.50315638,不應該將其縮放到1.44151861,又稱訓練特征向量的最大值?

StandardScaler API中

通過去除均值並縮放到單位方差來標准化特征

這是訓練有素的x1 ,所以它使用的方差/平均x1在這兩種情況下。 因此,這很簡單:

>>> (x1 - np.mean(x1)) / np.std(x1)
array([-0.94627295, -0.90205459, -0.54830769,  0.95511663,  1.44151861])

>>> (x2 - np.mean(x1)) / np.std(x1)
array([ -0.94627295,  -0.90205459,  -0.54830769,   0.95511663, 28.50315638])

您可能正在尋找Sagar提出的建議。

它的行為正確,對於您的用例,您可以使用MinMaxScalerMaxAbsScaler ,它們分別適合訓練數據和測試數據[0,1]或[-1,1]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM