StandardScaler中fit_transform和transform的区别

在使用StandardScaler的时候需要先新建一个它的对象

from sklearn.preprocessing import StandardScaler
stdScaler=StandardScaler()

fit_transform是对数据做归一化,归一化后的数据的每1列的均值为0,方差与每一列的数据个数相同.例如下面这样的一个数据

[[1,2,0],
[-1,-2,4]]

对它进行fit_transform操作后会得到

[[ 1.  1. -1.]
 [-1. -1.  1.]]

这个时候StandardScaler就会记录对数据做归一化的时候使用的规则。
比如说对于第1列就是不做任何操作
对第2列数据除以2
对第3列数据先除以2再减1
后面再调用transform函数的时候就是直接使用fit_transform的时候记录下来的归一化规则,例如对下面这样的一组数据调用transform

[[1,1,1],
[1,1,1]]

它会直接把上面的统计结果直接使用在这组数据上,
调用stdScaler.transform()后得到

[[1,0.5,-0.5],
[1,0.5,-0.5]]

以下是完整的示例代码

from sklearn.preprocessing import StandardScaler
import numpy

mainMat=numpy.array([[1,2,0],[-1,-2,4]])
#测试矩阵
testMat=mainMat*0+2
#输出测试矩阵
print(testMat)
#新建一个用于标准化的对象
stdScaler=StandardScaler()
#对矩阵做fit标准化
matFit=stdScaler.fit_transform(mainMat)
#计算标准化结果的平方和
sumValue=0
for row in matFit:
    for num in row:
        sumValue+=num*num
print(sumValue)
#输出标准化后的结果
print(matFit)
#对矩阵做直接的标准化
matTrans=stdScaler.transform(testMat)
#输出直接标准化后的结果
print(matTrans)

输出结果为

[[2 2 2]
 [2 2 2]]
6.0
[[ 1.  1. -1.]
 [-1. -1.  1.]]
[[2. 1. 0.]
 [2. 1. 0.]]

你可能感兴趣的:(StandardScaler中fit_transform和transform的区别)