数据的预处理是一个重要的步骤,而正向化、标准化和归一化是常用的预处理方法。
1. 数据正向化
定义: 数据正向化是将数据转化为对模型有利的正面方向。这通常在评价体系中使用,比如当某一指标数值越大表示越好时,称之为“正向指标”;而当数值越小表示越好时,称之为“反向指标”。为了统一处理,反向指标需要进行正向化。
方法: 一般来说,反向指标的正向化可以通过以下方式实现
方法: 一般来说,反向指标的正向化可以通过以下方式实现: 𝑌正向化=最大值+最小值−y y是反向指标的原始值。
应用场景: 当你的模型需要处理多个不同方向的指标时,正向化可以统一指标的方向,使得模型更好地进行比较和优化。
2. 数据标准化
定义: 数据标准化是指将不同单位或量级的数据转换到一个统一的尺度,通常是通过调整数据的均值为0,标准差为1的标准正态分布。
方法: 标准化通常采用以下公式:
X是原始数据,u是数据的均值,σ是数据的标准差。
应用场景: 当你的数据存在不同的量纲或者不同特征的数据分布差异很大时,标准化有助于消除这些影响,使得模型更稳定有效,特别是在使用机器学习算法(如SVM、K均值、PCA等)时。
3. 数据归一化
定义: 数据归一化是将数据按比例缩放到某个特定的范围,通常是[0, 1]或[-1, 1]。
方法: 归一化的一般公式如下: X归一化=
其中X是原始数据,最大值和最小值分别是数据集中的最大和最小值。
应用场景: 归一化常用于需要将不同量级的数据转换到同一尺度的场景,尤其是在需要计算距离或相似度的算法中(如K近邻算法)。
假设我们有以下一个包含三个样本的指标数据集:
样本 指标A 指标B (正向) 指标C (反向) 1 50 100 300 2 70 150 200 3 90 120 100
1. 数据正向化代码
import pandas as pd
# 创建数据集
data = {
'样本': [1, 2, 3],
'指标A': [50, 70, 90],
'指标B': [100, 150, 120],
'指标C': [300, 200, 100]
}
df = pd.DataFrame(data)
# 指标C正向化
max_C = df['指标C'].max()
min_C = df['指标C'].min()
df['指标C_正向化'] = max_C + min_C - df['指标C']
print("正向化后的数据:")
print(df)
2. 数据标准化代码
标准化处理是将数据调整到均值为0,标准差为1。我们将对指标A进行标准化处理。
# 指标A标准化
mean_A = df['指标A'].mean()
std_A = df['指标A'].std()
df['指标A_标准化'] = (df['指标A'] - mean_A) / std_A
print("\n标准化后的数据:")
print(df)
3. 数据归一化代码
归一化处理是将数据缩放到[0, 1]范围内。我们将对指标B进行归一化处理。
# 指标B归一化
min_B = df['指标B'].min()
max_B = df['指标B'].max()
df['指标B_归一化'] = (df['指标B'] - min_B) / (max_B - min_B)
print("\n归一化后的数据:")
print(df)
运行结果
通过上述代码处理,我们可以得到如下的结果:
正向化后的数据:
样本 指标A 指标B 指标C 指标C_正向化
0 1 50 100 300 100
1 2 70 150 200 200
2 3 90 120 100 300
标准化后的数据:
样本 指标A 指标B 指标C 指标C_正向化 指标A_标准化
0 1 50 100 300 100 -1.224745
1 2 70 150 200 200 0.000000
2 3 90 120 100 300 1.224745
归一化后的数据:
样本 指标A 指标B 指标C 指标C_正向化 指标A_标准化 指标B_归一化
0 1 50 100 300 100 -1.224745 0.000000
1 2 70 150 200 200 0.000000 1.000000
2 3 90 120 100 300 1.224745 0.400000
解释
- 指标A的标准化 结果是有负值的,这是因为标准化是将数据转化为均值为0的分布,对于小于均值的数据,标准化后会出现负值。
- 指标B的归一化 结果完全符合预期,所有值都在0到1之间,没有负值。
总结
- 正向化 是为了解决指标方向性的问题,使所有指标都能在同一方向上进行比较。
- 标准化 是为了解决数据的量纲问题,使数据转化为均值为0、标准差为1的标准正态分布,便于算法的处理。
- 归一化 则是为了将数据缩放到特定的范围内,通常用于需要计算距离的算法中。