我想缩放矩阵X1(按列),然后用缩放X1时发现的均值和标准差缩放另一个矩阵X2。
据我所知,sklearn在缩放矩阵时不返回均值/方差。有没有不需要我执行的替代方法?
例如:
X1
1 2 3 4
5 6 7 8
9 10 11 12
X2 12 13 14 15
16 17 18 19
用(X2[i][j] - mean[X1[:, i]]) / std[X1[:, i]]
代替X2[i][j]
不能使用sklearn预处理的尺度函数,因为它不返回均值和方差。
scikit learn中的Standard Scaler可以很好地处理这个问题,以及一些极端情况。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X1)
output = scaler.transform(X2)
如果需要,可以使用
访问特征列的均值和标准差scaler.std_
scaler.mean_
您还可以在管道中使用StandardScaler作为预估器之前的预处理。
.std()
和.mean()
方法都接受axis
参数来计算行/列统计数据,其余的将通过boardcasting来处理:
In [170]:
X1
Out[170]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
In [171]:
X2
Out[171]:
array([[12, 13, 14, 15],
[16, 17, 18, 19]])
In [172]:
(X2-X1.mean(0))/X1.std(0)
Out[172]:
array([[ 2.14330352, 2.14330352, 2.14330352, 2.14330352],
[ 3.3680484 , 3.3680484 , 3.3680484 , 3.3680484 ]])