MinMaxScalar
将数据归一化到[0,1],计算公式如下:
X
s
c
a
l
e
d
=
X
−
X
.
m
i
n
(
a
x
i
s
=
0
)
)
X
.
m
a
x
(
a
x
i
s
=
0
)
−
X
.
m
i
n
(
a
x
i
s
=
0
)
∗
(
m
a
x
−
m
i
n
)
+
m
i
n
X_{scaled} = \frac{X - X.min(axis=0))}{X.max(axis=0) - X.min(axis=0)}*(max - min)+min
Xscaled=X.max(axis=0)−X.min(axis=0)X−X.min(axis=0))∗(max−min)+min
其中min,max = feature_range,为归一化后数据的区间,默认是[0,1]。
MinMaxScalar归一化得到的数据会完全落入[0,1]区间内(z-score没有类似区间),而且能使数据归一化落到一定的区间内,同时保留原始数据的结构。
MaxAbsScalar
将数据归一化到[-1,1],计算公式如下:
X
s
a
c
l
e
d
=
X
∣
X
∣
.
m
a
x
(
a
x
i
s
=
0
)
X_{sacled} = \frac{X}{|X|.max(axis=0)}
Xsacled=∣X∣.max(axis=0)X
同MinMaxScalar相同,MaxAbsScalar得到的数据会完全落入[-1, 1]区间内(z-score没有类似区间),而且能使数据归一化落到一定的区间内,同时保留原始数据的结构。
MinMaxScalar和MaxAbsScalar的优点:
- 对于方差非常小的属性可以增强其稳定性;
- 维持稀疏矩阵中为0的条目
StandardScaler
将数据缩放到均值为0,方差为1,计算公式如下:
X
s
a
c
l
e
d
=
X
−
X
.
m
e
a
n
(
a
x
i
s
=
0
)
X
.
s
t
d
(
a
x
i
s
=
0
)
X_{sacled} = \frac{X - X.mean(axis=0)}{X.std(axis=0)}
Xsacled=X.std(axis=0)X−X.mean(axis=0)
StandardScaler适合大多数的数据类型的数据,得到的数据是以0为均值,1为方差的正态分布,但这种方法改变了原始数据的结构,因此不适宜用于对稀疏矩阵做数据预处理。
StandardScaler也能够接受 scipy.sparse 作为输入,只要参数 with_mean=False 被准确传入它的构造器。否则会出现 ValueError 的错误,因为默认的中心化会破坏稀疏性,并且经常会因为分配过多的内存而使执行崩溃。
RobustScaler
计算公式如下:
X
s
c
a
l
e
d
=
X
−
X
.
m
e
d
i
a
n
(
a
x
i
s
=
0
)
X
.
q
u
a
n
t
i
l
e
(
m
a
x
)
−
X
.
q
u
a
n
t
i
l
e
(
m
i
n
)
X_{scaled} = \frac{X - X.median(axis=0)}{X.quantile(max) - X.quantile(min)}
Xscaled=X.quantile(max)−X.quantile(min)X−X.median(axis=0)
如果数据包含许多异常值,可以使用RobustScaler或robust_scaler。
RobustScaler将中位数当做数据的中心,移除中位数,然后根据分位数范围(默认为IQR,0.75分位数和0.25分位数间距)
QuantileTransformer
此变换是非线性的。通过累积密度函数投影原始值。可以通过设置参数将数据转化为均匀分布或是高斯分布。