基于Python的数据标准化方法
在数据分析之前,通常需要先将数据标准化(Standardization),利用标准化后的数据进行数据分析,以避免属性之间不同度量和取值范围差异造成数据对分析结果的影响。
1. z-score方法
Z-score方法是基于原始数据的均值和标准差来进行数据标准化的,处理后的数据均值为0,方差为1,符合标准正态分布,且无量纲。其主要目的是将不同量级的数据统一化为同一个量级,用计算出的z-score值衡量,保证了数据间具有可比性。常用形式为: x n o r m a l i z a t i o n = x − μ σ x_{normalization} = \frac{x-\mu}{\sigma} xnormalization=σx−μ
其中
x
x
x表示原始数据,
μ
\mu
μ表示原始数据的平均值,
σ
\sigma
σ表示原始数据的标准差,
x
n
o
r
m
a
l
i
z
a
t
i
o
n
x_{normalization}
xnormalization表示标准化后的数据。数据标准化的方法有自定义和
S
t
a
n
d
a
r
S
c
a
l
e
r
(
)
StandarScaler()
StandarScaler()等方法。
以下使用sklearn模块中的方法StandardScaler()来实现数据标准化,需要调用sklearn包。
#自定义数据标准化示例
def my_scale(data):
mean= sum(data)/len(data) #求均值
#求方差
variance=( sum([(i-mean)**2 for i in data]))/len(data)
#按照公式标准化
normal = [(i - mean)/(variance)**0.5 for i in data]
return normal
import numpy as np
X = np.array([[2.,-1.,2.],[2.,0.,0.],[0.,1.,-2.]])
scale=my_scale(X)
xs=np.array(scale)
print("标准化前的数据:\n",X)
print("标准化后的数据:\n",xs)
标准化前的数据:
[[ 2. -1. 2.]
[ 2. 0. 0.]
[ 0. 1. -2.]]
标准化后的数据:
[[ 0.70710678 -1.22474487 1.22474487]
[ 0.70710678 0. 0. ]
[-1.41421356 1.22474487 -1.22474487]]
#StandarScaler()方法数据标准化示例。
import numpy as np
from sklearn import preprocessing
X = np.array([[2.,-1.,2.],[ 2.,0.,0.],[0.,1.,-2.]])
#求得训练集X的均值,方差,最大值,最小值等固有属性
scaler = preprocessing.StandardScaler().fit(X)
#在fit的基础上,进行标准化,降维,归一化等操作
xs=scaler.transform(X)
print("标准化前的数据:\n",X)
print("标准化后的数据:\n",xs)
标准化前的数据:
[[ 2. -1. 2.]
[ 2. 0. 0.]
[ 0. 1. -2.]]
标准化后的数据:
[[ 0.70710678 -1.22474487 1.22474487]
[ 0.70710678 0. 0. ]
[-1.41421356 1.22474487 -1.22474487]]
2. 极差标准化方法
极差标准化也称为区间缩放法或称0-1标准化,它是对原始数据所做的一种线性变换,将原始数据映射到[0,1]区间。常用形式为:
y
i
j
=
x
i
j
−
m
i
n
{
x
i
j
}
m
a
x
{
x
i
j
}
−
m
i
n
{
x
i
j
}
y_{ij}=\frac{x_{ij}-min\{x_{ij}\}}{max\{x_{ij}\}-min\{x_{ij}\}}
yij=max{xij}−min{xij}xij−min{xij}
其中
m
i
n
{
x
i
j
}
min\{x_{ij}\}
min{xij}和
m
a
x
{
x
i
j
}
max\{x_{ij}\}
max{xij}指的是和
x
i
j
x_{ij}
xij同一数据集的最小值和最大值。极差标准化的方法有自定义和 MaxMinScaler() 等方法.
#极差标准化自定义方法示例。
def my_scale(data):
data = (data-data.min())/(data.max()-data.min())
return data
import numpy as np
X = np.array([[2.,-1.,2.],[ 2.,0.,0.],[0.,1.,-2.]])
xs=my_scale(X)
print("标准化前的数据:\n",X)
print("标准化后的数据:\n",xs)
标准化前的数据:
[[ 2. -1. 2.]
[ 2. 0. 0.]
[ 0. 1. -2.]]
标准化后的数据:
[[1. 0.25 1. ]
[1. 0.5 0.5 ]
[0.5 0.75 0. ]]
# MinMaxScaler()方法数据标准化示例。
import numpy as np
from sklearn import preprocessing
X = np.array([[2.,-1.,2.],[ 2.,0.,0.],[0.,1.,-2.]])
minmaxsacler = preprocessing.MinMaxScaler()
minmaxsacler.fit(X)
xs=minmaxsacler.transform(X)
print("标准化前的数据:\n",X)
print("标准化后的数据:\n",xs)
标准化前的数据:
[[ 2. -1. 2.]
[ 2. 0. 0.]
[ 0. 1. -2.]]
标准化后的数据:
[[1. 0. 1. ]
[1. 0.5 0.5]
[0. 1. 0. ]]
3. 最大绝对值标准化方法
最大绝对值标准化方法是
x
i
j
x_{ij}
xij除以其最大的绝对值,也就是将原始数据映射到[-1,1]区间内。常用形式为:
y
i
j
=
x
i
j
m
a
x
{
∣
x
i
j
∣
}
y_{ij}=\frac{x_{ij}}{max\{|x_{ij}|\}}
yij=max{∣xij∣}xij
# 使用MaxAbsScaler()方法进行数据标准化示例。
import numpy as np
from sklearn import preprocessing
X1 = np.array([[2.,-1.,2.],[ 2.,0.,0.],[0.,1.,-2.]])
abssacler = preprocessing.MaxAbsScaler()
abssacler.fit(X1)
xs=abssacler.transform(X)
print("标准化前的数据:\n",X)
print("标准化后的数据:\n",xs)
标准化前的数据:
[[ 2. -1. 2.]
[ 2. 0. 0.]
[ 0. 1. -2.]]
标准化后的数据:
[[ 1. -1. 1.]
[ 1. 0. 0.]
[ 0. 1. -1.]]