机器学习10-特征缩放
特征缩放的目的是确保不同特征的数值范围相近,使得模型在训练过程中更加稳定,加速模型收敛,提高模型性能。具体而言,零均值和单位方差的目标有以下几点好处:
1. 均值为零(Zero Mean):通过减去特征的均值,可以使特征分布的中心位于零点。这样做有助于消除不同特征之间的偏差,确保模型不会在某些特征上过度拟合。如果某个特征的均值远离零,模型可能会更关注那些数值较大的特征。
2. 单位方差(Unit Variance):通过除以特征的标准差,可以将特征的尺度统一为相似的范围。这是因为不同特征可能具有不同的数值范围,如果某个特征的值较大,它可能会在模型中占据主导地位,而忽略其他特征。通过保持单位方差,确保了所有特征对模型的贡献相对均衡。
总的来说,零均值和单位方差的特征更容易被模型理解和处理,有助于提高模型的性能和泛化能力。特征缩放通常对那些使用距离度量或梯度下降等优化算法的模型尤为重要,如支持向量机、k最近邻、神经网络等。
单位方差指的是数据的方差被标准化为 1。
在特征缩放中,我们通常使用 StandardScaler
来实现单位方差。StandardScaler
通过减去均值并除以标准差的方式,将数据的分布调整为均值为 0,标准差为 1。
下面是一个简单的例子,演示如何使用 StandardScaler
实现单位方差:
import numpy as np
from sklearn.preprocessing import StandardScaler
# 创建一组示例数据
data = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 初始化 StandardScaler
scaler = StandardScaler()
# 计算均值和标准差,并进行缩放
scaled_data = scaler.fit_transform(data)
# 输出缩放后的数据
print("原始数据:")
print(data)
print("\n缩放后的数据(单位方差):")
print(scaled_data)
结果:
缩放后的数据(单位方差):
[[-1.22474487 -1.22474487 -1.22474487]
[ 0. 0. 0. ]
[ 1.22474487 1.22474487 1.22474487]]
解释:
在这个例子中,我们创建了一个 3x3 的矩阵作为示例数据。然后,使用 StandardScaler
对数据进行缩放。输出中的缩放后数据的每个特征都具有零均值和单位方差。这是通过 fit_transform
方法完成的,该方法计算数据的均值和标准差,并将数据进行相应的缩放。
在实际应用中,特征缩放是机器学习中的一项常见预处理步骤,有助于确保不同特征之间的尺度不同不会影响模型的性能。
这段程序使用了`StandardScaler`类进行数据的标准化,标准化是一种特征缩放的方法。下面是这段程序的数学运算步骤:
1. 计算均值(Mean):
对每个特征,计算其在所有样本上的平均值。对于示例数据,每一列的均值分别是
2. 计算标准差(Standard Deviation):
对每个特征,计算其在所有样本上的标准差。标准差是每个数据点与均值的偏差的平方的平均值的平方根。对于示例数据,可以计算每列的标准差。
3. 进行缩放操作:
使用标准化公式进行缩放。对于每个特征,将其减去均值,然后除以标准差。这样可以确保每个特征的均值为0,标准差为1。
对于示例数据,缩放后的值可以通过以下公式计算:
其中, x 是原始数据中的每个数据点, mean 是均值, std 是标准差。
结论:
这样,经过标准化处理后,每个特征的均值为0,标准差为1,即实现了单位方差。