Z-Score
在进行数据预处理时,我们常用Z-Score进行数据标准化(Standerlization),可以使得数据的均值为 0,标准差为 1,下面将对这一特性进行证明
Z-Score公式
假设我们有原始数据集X={X1,X2,⋯ ,Xn}X = \lbrace X_1,X_2, \cdots , X_n \rbraceX={X1,X2,⋯,Xn},
则样本均值为:
X‾=1n∑i=1nXi
\overline{X} = \frac{1}{n} \sum_{i = 1}^{n}X_i
X=n1i=1∑nXi
样本方差sX2s_X^2sX2为(使用 n−1 作为分母,即贝塞尔校正,这也是 Pandas std() 的默认行为):
sX2=1n−1∑i=1n(Xi−X‾)2
s_X^2 = \frac{1}{n-1} \sum_{i = 1}^{n}(X_i - \overline{X})^2
sX2=n−11i=1∑n(Xi−X)2
Z-Score描述了这样一种从原来的X={X1,X2,⋯ ,Xn}X = \lbrace X_1,X_2, \cdots , X_n \rbraceX={X1,X2,⋯,Xn}数据集到新的数据集Z={Z1,Z2,⋯ ,Zn}Z=\lbrace Z_1,Z_2, \cdots , Z_n \rbraceZ={Z1,Z2,⋯,Zn}的变换:
Zi=Xi−X‾sX
Z_i = \frac{X_i - \overline{X}}{s_X}
Zi=sXXi−X
我们需要证明的就是:
Z‾=0,sZ=1
\overline{Z} = 0 , s_Z = 1
Z=0,sZ=1
证明
根据均值公式:
Z‾=1n∑i=1nZi=1n∑i=1nXi−X‾sX=1n⋅sX∑i=1n(Xi−X‾)=1n⋅sX(∑i=1nXi−∑i=1nX‾)=1n⋅sX⋅0=0
\begin{align*}
\overline{Z}
& = \frac{1}{n} \sum_{i = 1}^{n}Z_i \\
& = \frac{1}{n} \sum_{i = 1}^{n}\frac{X_i - \overline{X}}{s_X} \\
& = \frac{1}{n \cdot s_X} \sum_{i = 1}^{n}(X_i - \overline{X}) \\
& = \frac{1}{n \cdot s_X} (\sum_{i = 1}^{n}X_i - \sum_{i = 1}^{n}\overline{X}) \\
& = \frac{1}{n \cdot s_X} \cdot 0 \\
& = 0
\end{align*}
Z=n1i=1∑nZi=n1i=1∑nsXXi−X=n⋅sX1i=1∑n(Xi−X)=n⋅sX1(i=1∑nXi−i=1∑nX)=n⋅sX1⋅0=0
Z‾=0\overline{Z} = 0Z=0证明完毕
证明标准差为1即证明方差为1根据方差公式:
sZ2=1n−1∑i=1n(Zi−Z‾)2=1n−1∑i=1n(Zi−0)2=1n−1∑i=1nZi2=1n−1∑i=1n(Xi−X‾sX)2=1(n−1)⋅(sX)2∑i=1n(Xi−X‾)2=1sX2⋅1(n−1)∑i=1n(Xi−X‾)2=1sX2⋅sX2=1
\begin{align*}
s_Z^2
& = \frac{1}{n-1} \sum_{i = 1}^{n}(Z_i - \overline{Z})^2 \\
& = \frac{1}{n-1} \sum_{i = 1}^{n}(Z_i - 0)^2 \\
& = \frac{1}{n-1} \sum_{i = 1}^{n}Z_i^2 \\
& = \frac{1}{n-1}
\sum_{i = 1}^{n}(\frac{X_i - \overline{X}}{s_X})^2 \\
& = \frac{1}{(n-1) \cdot (s_X)^2}
\sum_{i = 1}^{n}(X_i - \overline{X})^2 \\
& = \frac{1}{s_X^2} \cdot \frac{1}{(n-1)}
\sum_{i = 1}^{n}(X_i - \overline{X})^2 \\
& = \frac{1}{s_X^2} \cdot s_X^2 \\
& = 1
\end{align*}
sZ2=n−11i=1∑n(Zi−Z)2=n−11i=1∑n(Zi−0)2=n−11i=1∑nZi2=n−11i=1∑n(sXXi−X)2=(n−1)⋅(sX)21i=1∑n(Xi−X)2=sX21⋅(n−1)1i=1∑n(Xi−X)2=sX21⋅sX2=1
因此,sZ2=1s_Z^2 = 1sZ2=1 证明完毕
实现
在python中,实现Z-Score非常简单,下面用一个简单的匿名函数实现:
lambda x : (x - x.mean()) / (x.std())

1703

被折叠的 条评论
为什么被折叠?



