文章目录
一、特征缩放概述
特征缩放是指通过某种方法将不同量纲的特征转换到相同量纲,以消除特征之间的量纲差异,从而提高模型的收敛速度和准确性。
二、离差标准化(Min-Max Normalization)
离差标准化将数据缩放到一个指定的范围(通常是[0, 1])。其公式为:
X ′ = X − X m i n X m a x − X m i n X' = \frac{X - X_{min}}{X_{max} - X_{min}} X′=Xmax−XminX−Xmin
1. 原理介绍
离差标准化通过将每个特征值减去最小值并除以范围(最大值减最小值),使得数据的最小值变为0,最大值变为1。
2. 优缺点
优点
- 简单直观,容易理解和实现。
- 适用于分布较稳定的数据集。
缺点
- 对于有异常值的数据,敏感度较高,异常值会显著影响结果。
- 依赖于数据的最小值和最大值,数据范围变化会导致重新计算。
3. 代码
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
# 示例数据
data = {'feature': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 使用MinMaxScaler进行离差标准化
scaler = MinMaxScaler()
df['normalized_feature'] = scaler.fit_transform(df[['feature']])
print(df)
三、标准差标准化(Standardization)
标准差标准化将数据转换为均值为0,标准差为1的标准正态分布。其公式为:
X ′ = X − μ σ X' = \frac{X - \mu}{\sigma} X′=σX−μ
1. 原理介绍
标准差标准化通过减去均值并除以标准差,使得数据分布的均值为0,标准差为1,适用于有正态分布假设的数据。
2. 优缺点
优点
- 对于有正态分布假设的数据效果好。
- 对异常值的影响相对较小。
缺点
- 计算过程相对复杂。
- 需要知道数据的均值和标准差,数据变化时需要重新计算。
3. 代码
from sklearn.preprocessing import StandardScaler
# 使用StandardScaler进行标准差标准化
scaler = StandardScaler()
df['standardized_feature'] = scaler.fit_transform(df[['feature']])
print(df)
四、小数定标标准化(Decimal Scaling Normalization)
小数定标标准化通过移动小数点位置将数据缩放到[-1, 1]范围。其公式为:
X ′ = X 1 0 j X' = \frac{X}{10^j} X′=10jX
其中,j是使得 m a x ( ∣ X ′ ∣ ) < 1 max(|X'|) < 1 max(∣X′∣)<1的最小整数。
1. 原理介绍
小数定标标准化通过移动小数点的位置,使得数据值的绝对值小于1。
2. 优缺点
优点
- 实现简单,计算方便。
- 不依赖于数据的统计特性(如均值、标准差)。
缺点
- 对数据的分布没有改善作用。
- 适用于值较为集中的数据,不适合范围差异大的数据。
3. 代码
# 小数定标标准化
def decimal_scaling(data):
max_abs = max(abs(data))
j = np.ceil(np.log10(max_abs))
return data / (10**j)
df['decimal_scaled_feature'] = decimal_scaling(df['feature'])
print(df)
五、函数转换(Function Transformation)
函数转换通过对数据应用某种数学函数(如对数、平方根)来进行标准化。
1. 原理介绍
函数转换可以用于使数据更符合正态分布或减少数据的偏度,常用的转换方法有对数转换、平方根转换等。
2. 优缺点
优点
- 可以有效处理数据的偏态分布。
- 提高模型对异常值的鲁棒性。
缺点
- 需要选择合适的函数,选择不当可能无法改善数据分布。
- 某些函数转换可能会对数据范围有限制(如对数转换要求数据为正)。
3. 代码
# 对数转换
df['log_transformed_feature'] = np.log(df['feature'])
# 平方根转换
df['sqrt_transformed_feature'] = np.sqrt(df['feature'])
print(df)