机器学习07-归一化与标准化
归一化与标准化
一、基本概念
- 归一化(Normalization)
- 定义:将数据缩放到一个固定的区间,通常是[0,1]或[-1,1],以消除不同特征之间的量纲影响和数值范围差异。
- 公式:对于数据 ( x ),归一化后的值 ( x’ ) 为
[
x’=\frac{x-\min(x)}{\max(x)-\min(x)}
]
其中,(\min(x)) 和 (\max(x)) 分别是该特征列的最小值和最大值。 - 作用:使不同特征的数据处于同一量纲水平,便于模型处理和比较,避免某些特征因数值范围大而对模型产生主导作用。
- 标准化(Standardization)
- 定义:将数据进行变换,使其均值为0,标准差为1,从而消除数据的分布差异。
- 公式:对于数据 ( x ),标准化后的值 ( x’ ) 为
[
x’=\frac{x-\mu}{\sigma}
]
其中,(\mu) 是该特征列的均值,(\sigma) 是该特征列的标准差。 - 作用:使数据符合标准正态分布,适用于对数据分布有一定假设的模型,如线性回归、逻辑回归等,能够提高模型的收敛速度和性能。
二、使用场景
- 归一化
- 适用场景:
- 当数据的量纲不同,且数值范围差异较大时,如身高(cm)和体重(kg)。
- 对于基于距离的模型,如K近邻(KNN)、K均值聚类(K-Means)等,归一化可以避免距离计算时某些特征的主导作用。
- 数据挖掘中,用于数据预处理,使数据更加易于处理和分析。
- 不适用场景:
- 当数据中存在异常值时,归一化可能会受到异常值的影响,导致归一化后的数据范围不准确。
- 对于一些对数据分布有特定要求的模型,如假设数据服从正态分布的模型,归一化可能不适用。
- 适用场景:
- 标准化
- 适用场景:
- 当数据服从正态分布或近似正态分布时,标准化可以将数据转换为标准正态分布,便于模型处理。
- 对于基于梯度下降的优化算法,如线性回归、逻辑回归等,标准化可以加快模型的收敛速度,提高模型的性能。
- 在机器学习模型中,当需要对特征进行加权求和或线性组合时,标准化可以使不同特征的权重更加合理。
- 不适用场景:
- 当数据的分布不符合正态分布,且模型对数据分布没有特定要求时,标准化可能没有明显的优势。
- 对于一些非线性模型,如决策树、随机森林等,标准化对模型性能的提升可能不明显。
- 适用场景:
三、优缺点
- 归一化
- 优点:
- 简单易实现,计算速度快。
- 可以将数据缩放到指定的区间,便于模型处理和比较。
- 对于基于距离的模型,可以有效避免数值范围差异对模型的影响。
- 缺点:
- 对异常值敏感,异常值可能会导致归一化后的数据范围不准确。
- 如果数据的最小值和最大值发生变化,需要重新计算归一化参数。
- 归一化后的数据范围固定,可能会丢失数据的原始分布信息。
- 优点:
- 标准化
- 优点:
- 可以将数据转换为标准正态分布,适用于对数据分布有特定要求的模型。
- 对异常值的鲁棒性较好,不会受到异常值的较大影响。
- 可以加快基于梯度下降的优化算法的收敛速度,提高模型的性能。
- 缺点:
- 计算过程相对复杂,需要计算均值和标准差。
- 对于非正态分布的数据,标准化后的数据可能仍然不符合标准正态分布。
- 如果数据的均值和标准差发生变化,需要重新计算标准化参数。
- 优点:
四、代码实现
- 归一化(Python代码)
import numpy as np from sklearn.preprocessing import MinMaxScaler# 示例数据 data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 使用MinMaxScaler进行归一化 scaler = MinMaxScaler() normalized_data = scaler.fit_transform(data)print("归一化后的数据:") print(normalized_data)
- 标准化(Python代码)
import numpy as np from sklearn.preprocessing import StandardScaler# 示例数据 data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 使用StandardScaler进行标准化 scaler = StandardScaler() standardized_data = scaler.fit_transform(data)print("标准化后的数据:") print(standardized_data)
五、总结
- 选择依据:
- 如果数据的量纲不同,且数值范围差异较大,可以选择归一化。
- 如果数据服从正态分布或近似正态分布,且模型对数据分布有特定要求,可以选择标准化。
- 对于基于距离的模型,如KNN、K-Means等,归一化通常更合适;对于基于梯度下降的优化算法,如线性回归、逻辑回归等,标准化通常更有效。
- 注意事项:
- 在进行归一化或标准化时,需要保存归一化或标准化的参数(如最小值、最大值、均值、标准差等),以便在对新数据进行预处理时使用相同的参数。
- 对于异常值较多的数据,可以考虑先对数据进行异常值处理,再进行归一化或标准化。
- 在实际应用中,可以根据模型的性能和数据的特点,尝试不同的归一化和标准化方法,选择最适合的方法。