[英]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,又稱訓練特征向量的最大值?
通過去除均值並縮放到單位方差來標准化特征
這是訓練有素的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提出的建議。
它的行為正確,對於您的用例,您可以使用MinMaxScaler或MaxAbsScaler ,它們分別適合訓練數據和測試數據[0,1]或[-1,1]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.