我正在使用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,也就是训练特征向量的最大值?
答案 0 :(得分:3)
通过删除均值和缩放到单位方差来标准化要素
它在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)
行为正确,对于您的用例,您可以使用MinMaxScaler或MaxAbsScaler哪种适合[0,1]或[-1,1]中的训练和测试数据分别