数据归一化和标准化是数据预处理中常用的技术,用于将数据转换到特定范围或分布,使得模型训练更加稳定和高效。以下是这两种方法的详细讲解及实现代码。

数据归一化(Normalization)

数据归一化是将数据按比例缩放,使之落入一个特定的范围(通常是[0, 1]或者[-1, 1])。常用的归一化方法包括最小-最大归一化。

最小-最大归一化

公式: \[ x' = \frac{x - x_{min}}{x_{max} - x_{min}} \]

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# 创建示例数据
data = {
'Feature1': [10, 20, 30, 40, 50],
'Feature2': [1, 2, 3, 4, 5]
}
df = pd.DataFrame(data)

# 初始化MinMaxScaler
scaler = MinMaxScaler()

# 进行归一化处理
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

print("归一化后的数据:")
print(df_normalized)

数据标准化(Standardization)

数据标准化是将数据调整到均值为0,标准差为1的正态分布。这通常是通过将每个数据点减去均值,然后除以标准差来实现的。

Z-score标准化

公式: \[ x' = \frac{x - \mu}{\sigma} \]

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pandas as pd
from sklearn.preprocessing import StandardScaler

# 创建示例数据
data = {
'Feature1': [10, 20, 30, 40, 50],
'Feature2': [1, 2, 3, 4, 5]
}
df = pd.DataFrame(data)

# 初始化StandardScaler
scaler = StandardScaler()

# 进行标准化处理
df_standardized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

print("标准化后的数据:")
print(df_standardized)

使用归一化和标准化的场景

  • 归一化:通常在不涉及距离计算的机器学习算法中使用,例如神经网络和线性回归,因为它可以加快收敛速度。
  • 标准化:通常在涉及距离计算的机器学习算法中使用,例如K近邻(KNN)和支持向量机(SVM),因为这些算法对数据的分布敏感。

通过上述方法,可以将数据进行归一化或标准化处理,使得数据在模型训练过程中表现更好,提高模型的性能和稳定性。