假设存在一组数据x=[x1,x2…xn],则均值、方差、标准差,以及矩阵的标准化计算公式如下:
均值:
x
ˉ
=
1
n
∑
i
=
1
n
x
i
\bar{x}=\frac{1}{n} \sum_{i=1}^{n} x_{i}
xˉ=n1∑i=1nxi
方差: σ 2 = 1 n ∑ i = 1 n ( x i − x ˉ ) 2 \sigma^{2}=\frac{1}{n} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2} σ2=n1∑i=1n(xi−xˉ)2
标准差: σ = 1 n ∑ i = 1 n ( x i − x ˉ ) 2 \sigma=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}} σ=n1∑i=1n(xi−xˉ)2
矩阵标准化: x i = x − x ˉ σ x_{i}=\frac{x-\bar{x}}{\sigma} xi=σx−xˉ
那么sklearn中StandardScaler.fit() 、StandardScaler.transform() 、StandardScaler.fit_transform()分别有什么用呢?
代码:
from sklearn.preprocessing import StandardScaler
# StandardScaler.fit() 计算矩阵每一列平均值和方差
# StandardScaler.transform() 根据均值和方差,将矩阵转标准化
# StandardScaler.fit_transform() 求均值和方差并标准化矩阵
scaler = StandardScaler()
data = [[1,2],[5,4]]
data1 = [1,2],[3,4]
data2 =[[2,4],[3,1]]
print('原始数据data:\n',data)
num1 = scaler.fit(data) #计算出矩阵每一列的均值和方差
num2 = scaler.fit_transform(data) #根据上一步的均值和方差,将矩阵转标准化
num3 = scaler.transform(data1) #注意这里是直接将矩阵data1标准化,而标准化又要用到均值和方差,所以这里用的均值和方差是data的均值和方差
num4 =scaler.transform(data2) #data2和data1一样,都是用的data的均值和方差
print('data的均值:\n',num1.mean_) #打印出矩阵每一列的均值
print('data的方差\n',num1.var_) #打印出矩阵每一列的方差
print('data标准化后的数据:\n',num2)
print('data1标准化后的数据:\n',num3)
print('data2标准化后的数据:\n',num4)
运行结果如下:
原始数据data:
[[1, 2], [5, 4]]
data的均值:
[3. 3.]
data的方差
[4. 1.]
data标准化后的数据:
[[-1. -1.]
[ 1. 1.]]
data1标准化后的数据:
[[-1. -1.]
[ 0. 1.]]
data2标准化后的数据:
[[-0.5 1. ]
[ 0. -2. ]]
进程已结束,退出代码为 0