数据归一化简介
为什么要使用特征缩放?
我们需要解决的第一个问题——为什么我们需要特征缩放?
一些机器学习算法对特征缩放敏感,而其他机器学习算法几乎不变。让我们按照不同的算法做区分。
基于梯度下降的算法
使用梯度下降作为优化技术的线性回归、逻辑回归、神经网络等机器学习算法需要对数据进行缩放。看看下面的梯度下降公式:
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_{j}:=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}
θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
公式中特征值x的存在会影响梯度下降的步长。特征范围的不同会导致每个特征的步长不同。为了确保梯度下降平稳地向最小值移动,并且梯度下降的步骤以相同的速率更新所有特征,我们在将数据输入模型之前缩放数据。
具有相似尺度的特征可以帮助梯度下降更快地收敛到最小值。
基于距离的算法
KNN、K-means 和 SVM 等基于距离算法受特征值范围的影响最大。这是因为,他们使用数据点之间的距离来确定它们的相似性。
例如,假设我们有包含学生高中 CGPA 分数(范围从 0 到 5)及其未来收入(以千卢比计)的数据:
由于这两个特征具有不同的尺度,因此有可能给予具有更高量级的特征更高的权重。这将影响机器学习算法的性能,显然,我们不希望我们的算法偏向于一个特征。
因此,我们在采用基于距离的算法之前缩放我们的数据,以便所有特征对结果的贡献相等。
当我们比较学生 A 和 B 的数据点之间以及 B 和 C 之间的欧几里德距离时,缩放的效果很明显,缩放前后如下所示:
缩放前的距离 AB =>
(
40
−
60
)
2
+
(
3
−
3
)
2
=
20
\sqrt{(40-60)^{2}+(3-3)^{2}}=20
(40−60)2+(3−3)2=20
缩放前的距离 BC =>
(
40
−
40
)
2
+
(
4
−
3
)
2
=
1
\sqrt{(40-40)^{2}+(4-3)^{2}}=1
(40−40)2+(4−3)2=1
缩放后的距离 AB =>
(
1.1
+
1.5
)
2
+
(
1.18
−
1.18
)
2
=
2.6
\sqrt{(1.1+1.5)^{2}+(1.18-1.18)^{2}}=2.6
(1.1+1.5)2+(1.18−1.18)2=2.6
缩放后的距离 BC =>
(
1.1
−
1.1
)
2
+
(
0.41
+
1.18
)
2
=
1.59
\sqrt{(1.1-1.1)^{2}+(0.41+1.18)^{2}}=1.59
(1.1−1.1)2+(0.41+1.18)2=1.59
可见,缩放后的feature,得到的距离现在比我们应用缩放之前更具可比性。
基于树的算法
另一方面,基于树的算法对特征的缩放相当不敏感。想想看,决策树只是根据单个特征拆分节点。决策树在增加节点同质性的特征上拆分节点。这种对特征的拆分不受其他特征的影响。
因此,其余特征对分割几乎没有影响。这就是使它们对特征的规模不变的原因!
什么是归一化?
归一化是一种缩放技术,其中值被移动和重新缩放,以便它们最终的范围在 0 和 1 之间。它也被称为最小-最大缩放。
这是归一化的公式:
X
′
=
X
−
X
min
X
max
−
X
min
X^{\prime}=\frac{X-X_{\min }}{X_{\max }-X_{\min }}
X′=Xmax−XminX−Xmin
其中,Xmax 和 Xmin 分别是特征的最大值和最小值。
- 当 X 的值为列中的最小值时,分子将为 0,因此 X’ 为 0
- 另一方面,当 X 的值为列中的最大值时,分子等于分母,因此 X’ 的值为 1
- 如果 X 的值介于最小值和最大值之间,则 X’ 的值介于 0 和 1 之间
什么是标准化?
标准化是另一种缩放技术,其中值以具有单位标准偏差的平均值为中心。这意味着属性的均值变为零,结果分布具有单位标准差。
这是标准化的公式:
X
′
=
X
−
μ
σ
X^{\prime}=\frac{X-\mu}{\sigma}
X′=σX−μ
- μ \mu μ是特征值的平均值
- σ \sigma σ是特征值的标准差。
- 请注意,在这种情况下,
X
′
X^{\prime}
X′不限于特定范围。
现在,您心中的大问题必须是我们什么时候应该使用规范化,什么时候应该使用标准化?让我们来了解一下。
规范化还是标准化?
规范化与标准化是机器学习新手之间永恒的问题。让我详细说明本节中的答案。
- 当您知道数据的分布不遵循高斯分布时,可以很好地使用归一化。这在不假设任何数据分布的算法中很有用,例如 K-最近邻和神经网络。
- 另一方面,在数据遵循高斯分布的情况下,标准化可能会有所帮助。然而,这不一定是真的。此外,与标准化不同,标准化没有边界范围。因此,即使您的数据中有异常值,它们也不会受到标准化的影响。
但是,归根结底,选择使用归一化还是标准化取决于您的问题和您使用的机器学习算法。没有硬性规定告诉您何时对数据进行规范化或标准化。您始终可以首先将模型拟合到原始数据、归一化数据和标准化数据,然后比较性能以获得最佳结果。
在训练数据上拟合缩放器,然后使用它来转换测试数据是一个很好的做法。这将避免模型测试过程中的任何数据泄漏。此外,通常不需要缩放目标值。
在 Python 中实现特征缩放
未完待续。。。
参考文章
https://www.analyticsvidhya.com/blog/2020/04/feature-scaling-machine-learning-normalization-standardization/