【ML】数据预处理

sklearn
数据清洗&预处理入门完整指南

标准化

使数据符合高斯分布,每个数据减去平均值,再除以标准差。目的是让所有特征都在相同的尺度上,从而避免因为特征尺度差异过大而对模型训练产生不良影响。

非线性变换
如对数变换、平方根变换等,旨在处理偏斜的数据,使其分布更接近正态分布,或者是为了使数据的关系更符合模型的假设。例如,如果数据分布严重偏斜,一些模型的性能可能会受到影响,这时候非线性变换可以帮助改善模型的性能。

因此,即使在进行了标准化之后,如果数据仍然呈现出明显的偏斜或者模型的性能不佳,可能就需要考虑非线性变换。反之,如果数据在标准化之后表现良好,模型性能满足需求,那么可能不需要进行非线性变换。

实际操作中,是否采用非线性变换通常通过探索性数据分析(EDA)来决定,EDA可以帮助你了解数据的分布情况。此外,模型的表现和交叉验证的结果也是决策的重要依据。在一些情况下,你可能会同时使用标准化和非线性变换,以最大限度地提高数据质量和模型性能。

归一化(规范化)

将将不同范围的数据缩放到一个指定的范围,通常是0到1之间,或者是-1到1之间。这是通过从每个值中减去特征的最小值并除以最大值和最小值之差来实现的。归一化有助于确保所有特征对模型的贡献是相等的,使不同的数据具有相似的分布和取值范围。

常见的数据归一化方法有以下几种:

最值归一化(Min-Max Normalization)
最值归一化是将数据映射到[0,1]范围内,公式如下:

Xnormalized=XXminXmaxXminXnormalized = \frac{X - Xmin}{Xmax - Xmin}

其中,Xmin和Xmax分别是数据集中的最小值和最大值。

均值方差归一化(Standardization)
就是标准化
均值方差归一化是将数据转换为均值为0,方差为1的数据,公式如下:

Xnormalized=XXmeanXstdXnormalized = \frac{X - Xmean}{Xstd}

其中,Xmean和Xstd分别是数据集的均值和标准差。

小数定标归一化
小数定标归一化是将数据的小数点移动到某一位置,使得数据范围在一定程度上缩小。例如,将数据的小数点向左移动2位,可以将数据的范围缩小100倍。

对数归一化
对数归一化是将数据取对数后进行归一化处理。这种方法通常用于处理数据的取值范围差异很大的情况。

数据归一化的目的是使得数据的分布更加规律
归一化处理可以使不同的数据具有相似的分布和取值范围,这在许多机器学习算法中是很有用的。例如,在使用梯度下降算法进行模型训练时,如果数据的范围差异很大,模型可能会在局部最小值附近来回震荡,导致收敛速度减慢。归一化处理可以使梯度下降算法更快地收敛,并且可以使模型的泛化能力更强。

但是,也要注意,如果数据已经具有相似的分布和取值范围,则不需要进行归一化处理。另外,在使用归一化处理后的数据进行模型训练后,在使用模型进行预测时,还需要将输入数据进行相应的反归一化处理,才能得到正确的预测结果。

使用pytorch进行归一化操作

normalize = transforms.Normalize((mean,), (std,))

其中 mean 为均值,std为方差,想进行归一化操作需要先计算出数据的均值和方差。

例如对MNIST数据集的处理:

# 定义图像处理方法
tranform = transforms.Compose([
    transforms.ToTensor(),  # 将图片转换成Tensor
    transforms.Normalize((0.1307,), (0.3081,))  # 进行数据归一化处理
])

其中 0.1307 和 0.3081 分别是 MNIST 的均值和方差,可以自己计算,也可以网上查
等同于 Xnormalized=X0.13070.3081Xnormalized = \frac{X - 0.1307}{ 0.3081},转化为均值为 0,方差为 1 的数据。

标准化和归一化的区别和联系
标准化和归一化是数据预处理中两种常用的尺度变换方法,它们都旨在调整特征值的尺度,以便于不同特征之间能够更公平地比较和组合,但它们在方法和用途上存在一些区别:

标准化(Z-score normalization)

  • 目的:使数据具有零均值(Mean = 0)和单位方差(Standard Deviation = 1)。
  • 计算方法:从每个特征值中减去特征的平均值,然后除以特征的标准差。
  • 应用场景:特别适用于那些假设数据为正态分布的算法,如支持向量机(SVM)、线性回归、逻辑回归等。标准化有助于加快一些算法的收敛速度,并提高其性能。

归一化(Min-Max normalization)

  • 目的:将数据缩放到一个指定的最小和最大值之间,通常是0和1之间。
  • 计算方法:从每个特征值中减去特征的最小值,然后除以最大值和最小值的差值。
  • 应用场景:特别适用于那些对输入数据的尺度敏感的算法,如神经网络、k-最近邻算法等。归一化有助于防止数据中某些特征在计算中占据主导地位。

区别和联系

  • 尺度范围:标准化后的数据不限于特定范围,而归一化后的数据范围通常是0到1或者-1到1。
  • 对异常值的敏感度:归一化由于直接依赖于最小值和最大值,所以对异常值非常敏感。而标准化由于是依据均值和标准差进行的,对异常值的敏感度较低。
  • 适用场景:标准化在数据假定为正态分布时特别有效,归一化适用于不假定数据分布的情境,尤其是当算法对数据的尺度非常敏感时。

离散化

它涉及将连续特征的值划分为几个区间,并将这些区间转换为离散的值。这种技术有助于处理连续变量,使其更适合某些特定的算法,尤其是那些设计用于处理类别输入的算法。离散化可以简化模型,使其更易于理解和解释,同时有助于处理异常值和提高模型的稳健性。

编码分类特征

将非数值特征转换为数值形式的过程。最常见的方法是独热编码(One-Hot Encoding),它为每个类别创建一个新的二进制特征,表明样本是否属于该类别。

缺失值的插补

缺失值的插补是处理缺失数据的方法。常见的插补技术包括使用平均值、中位数、众数填充缺失值,或者使用更复杂的方法如 k-NN 或回归。

生成多项式特征

通过现有特征的非线性组合来创建新特征的过程。例如,如果有两个特征 A 和 B ,可以创建新特征 A^2 B^2 和 AB 。这可以帮助机器学习模型捕捉特征之间的复杂关系。

移除低方差特征

低方差代表此特征不利于将样本分开,设置一个阈值,低于该阈值会被移除

赞赏