6 数据预处理之数据转换与归一化
在数据挖掘的过程中,数据预处理是一个不可或缺的环节。我们在上一篇中讨论了如何处理缺失值,确保数据集中每一个样本都有尽可能完整的信息。这一部分将重点介绍数据预处理中的一个重要方面——数据转换与归一化。我们会探讨这些步骤如何帮助提高后续建模的效果,并结合实例和代码更好地理解这些概念。
数据转换
数据转换是指对数据进行某种形式的变换,以便使其更加适合于模型的训练或分析。常见的转换操作包括:
对数变换:通常用于处理右偏分布的数值特征,能够减小极端值的影响。
例如,考虑某企业的收入数据,其分布可能高度右偏。这时,我们可以使用对数变换:
$$ X’ = \log(X + 1) $$
这里的 ‘+1’ 是为了避免对数零不能计算的问题。
1
2
3
4
5
6
7
8
9import pandas as pd
import numpy as np
# 创建数据框
df = pd.DataFrame({'收入': [5000, 10000, 150000, 2000000]})
# 进行对数变换
df['收入_log'] = np.log(df['收入'] + 1)
print(df)平方根变换:另一种常见的处理偏态数据的方法,尤其对于数据都为正的情况。
$$ X’ = \sqrt{X} $$
标准化:标准化是对特征进行线性变换,使其均值为 0,方差为 1,这一过程使得不同尺度的特征可以比较。
$$ X’ = \frac{X - \mu}{\sigma} $$
其中 $\mu$ 是特征的均值,$\sigma$ 是特征的标准差。
1
2
3
4
5
6
7from sklearn.preprocessing import StandardScaler
# 示例数据
data = np.array([[1, 2], [2, 3], [3, 4]])
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)
print(standardized_data)
归一化
与标准化相似,归一化是另一种常用的数据预处理技术,特别适用于在一个固定范围内缩放特征。归一化的常见方法是 Min-Max 归一化,它将特征缩放到 [0, 1] 区间。
$$ X’ = \frac{X - X_{min}}{X_{max} - X_{min}} $$
这种方式尤其适用于需要保持原特征分布形态的情况,并且在使用一些基于距离的算法(如 KNN、SVM 等)时,归一化会显著提高模型的表现。
1 | from sklearn.preprocessing import MinMaxScaler |
实际案例
假设我们在开展客户离职预测的项目,在数据集中我们有多种特征,例如客户的年龄、年收入、账户余额等。这些特征的取值范围与数据分布差异较大,直接投入模型可能导致模型的性能不佳。因此,适当地进行数据转换与归一化是非常必要的。
- 数据转换:我们首先对年收入进行对数变换,以便减小其与其它特征的差异。
- 数据归一化:我们使用 Min-Max 归一化对年龄和账户余额进行处理,这样做能够保证每个特征的数值范围更为一致。
下面是一个完整的数据预处理示例:
1 | import pandas as pd |
小结
在这部分中,我们详细介绍了数据转换与归一化的概念以及常用的方法。通过对数据进行适当的变换与缩放,能够让后续的模型训练更加高效,提高数据的可预测性,同时也能够减少不同特征之间的干扰。在数据处理完成后,我们可以进入下一步,进行探索性数据分析的描述性分析,以深入理解数据的特征与趋势,为模型选择提供支持。
接下来,我们将探讨探索性数据分析之描述性分析的内容。
6 数据预处理之数据转换与归一化