sklearn中的StandardScaler不合适,或者是它?

时间:2016-04-20 10:50:43

标签: python numpy machine-learning scikit-learn

我正在使用StandardScalar中的sklearn来扩展我的特征向量,但它似乎不适合训练特征向量。或者也许这是预期的行为,但如果是,有人可以解释原因(最好还有一些数学解释)。

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,也就是训练特征向量的最大值?

2 个答案:

答案 0 :(得分:3)

来自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提出的建议。

答案 1 :(得分:2)

行为正确,对于您的用例,您可以使用MinMaxScalerMaxAbsScaler哪种适合[0,1]或[-1,1]中的训练和测试数据分别