首页 > 其他分享 >数据集预处理

数据集预处理

时间:2024-06-15 12:23:03浏览次数:6  
标签:场景 验证 特征 数据 适用 异常 预处理

数据集预处理是数据分析和机器学习过程中至关重要的一步,旨在清洗和准备数据,以提高模型的性能和准确性。以下是详细的预处理流程,涵盖从数据收集到最终准备的所有关键步骤:

缺失值

  • 删除:删除包含大量缺失值的行或列。
  • 填补:使用均值、中位数、众数、插值法或预测模型等方法填补缺失值。

1. 删除缺失值(Drop)

适用场景

  • 数据集较大,删除部分数据不会影响整体分析结果。
  • 缺失值所占比例较小。

优点

  • 简单直接。
  • 不会引入任何偏差。

缺点

  • 可能丢失大量数据,影响统计分析的代表性。
  • 在缺失值较多时,可能导致数据不足。

2. 均值填补(Mean Imputation)

适用场景

  • 数据近似正态分布。
  • 缺失值比例较小,不会对均值造成较大偏差。

优点

  • 简单易行。
  • 保持数据集大小不变。

缺点

  • 忽略数据的变异性,可能低估方差。
  • 适用于均值对数据分布具有代表性的情况。

3. 中位数填补(Median Imputation)

适用场景

  • 数据存在偏态分布或有异常值。
  • 缺失值较少的情况下。

优点

  • 不受极端值的影响。
  • 保持数据集大小不变。

缺点

  • 不能反映数据的实际变异性。
  • 适用于中位数对数据分布具有代表性的情况。

4. 众数填补(Mode Imputation)

适用场景

  • 分类数据或离散型数据。
  • 缺失值较少的情况下。

优点

  • 简单易行。
  • 不受极端值的影响。

缺点

  • 在众数不明显时,可能不适用。
  • 不能反映数据的实际变异性。

5. 前向填充(Forward Fill)

适用场景

  • 时间序列数据。
  • 数据具有一定的时间连续性。

优点

  • 保持时间序列的连续性。
  • 简单易行。

缺点

  • 可能引入时间依赖性误差。
  • 不适用于无序数据。

6. 后向填充(Backward Fill)

适用场景

  • 时间序列数据。
  • 数据具有一定的时间连续性。

优点

  • 保持时间序列的连续性。
  • 简单易行。

缺点

  • 可能引入时间依赖性误差。
  • 不适用于无序数据。

7. 插值(Interpolation)

适用场景

  • 连续型数据。
  • 数据具有一定的趋势或模式。

优点

  • 能较好地反映数据的趋势。
  • 保持数据集大小不变。

缺点

  • 复杂度较高,可能需要选择合适的插值方法。
  • 不适用于离散型数据。

8. 填补特定值(Specific Value Imputation)

适用场景

  • 对缺失值有明确的填补要求。
  • 缺失值较少的情况下。

优点

  • 简单易行。
  • 可以根据具体情况灵活处理。

缺点

  • 可能引入人为偏差。
  • 不反映数据的实际变异性。

9. KNN填补(K-Nearest Neighbors Imputation)

适用场景

  • 连续型数据和离散型数据均适用。
  • 数据特征之间存在一定的相关性。

优点

  • 利用数据的整体结构进行填补。
  • 较准确地估计缺失值。

缺点

  • 计算复杂度较高,适用于较小的数据集。
  • 需要选择合适的K值。

10. 多重插补(Multiple Imputation)

适用场景

  • 数据集较大,缺失值较多的情况下。
  • 需要进行严谨的统计分析。

优点

  • 充分利用数据集信息。
  • 通过多次插补,减少单一填补方法的偏差。

缺点

  • 计算复杂度高,处理时间较长。
  • 实现较为复杂,需要专门的工具和算法。

11. 基于回归的插补(Regression Imputation)

适用场景

  • 数据特征之间有较强的线性关系。
  • 连续型数据。

优点

  • 能较好地利用特征之间的关系。
  • 提供合理的缺失值估计。

缺点

  • 依赖于线性关系假设,可能引入偏差。
  • 实现较为复杂。

12. 热卡插补(Hot Deck Imputation)

适用场景

  • 调查数据或问卷数据。
  • 类别型数据。

优点

  • 保留数据的内在特征。
  • 可以较好地反映数据的多样性。

缺点

  • 需要选择合适的相似性度量标准。
  • 实现复杂度较高。

异常值检测

1. Z-Score法

介绍
Z-Score法基于数据的标准正态分布,对于每个数据点,计算其与均值的标准差距离。通常,Z-Score超过3或低于-3的点被视为异常值。

适用场景

  • 数据近似正态分布。
  • 连续型数据。

优点

  • 简单易行,计算速度快。
  • 能有效识别大多数异常值。

缺点

  • 对非正态分布数据效果较差。
  • 对极端值较为敏感,可能会漏检一些异常值。

2. 箱线图法(IQR法)

介绍
箱线图法通过四分位数间距(IQR)来识别异常值。低于第一四分位数1.5倍IQR或高于第三四分位数1.5倍IQR的数据点被视为异常值。

适用场景

  • 任何分布形式的数据。
  • 连续型数据和离散型数据。

优点

  • 不依赖于数据分布形式。
  • 对极端值不敏感。

缺点

  • 对大规模数据的计算效率较低。
  • 可能会错过一些轻微的异常值。

3. 标准差法

介绍
标准差法通过数据的标准差来检测异常值。通常,超出均值3倍标准差的点被视为异常值。

适用场景

  • 数据近似正态分布。
  • 连续型数据。

优点

  • 简单易行,计算速度快。
  • 能有效识别大多数异常值。

缺点

  • 对非正态分布数据效果较差。
  • 对极端值较为敏感,可能会漏检一些异常值。

4. 视觉化方法(Visual Inspection)

介绍
通过可视化工具(如散点图、箱线图等)直观地识别异常值。

适用场景

  • 数据量较小,可以通过图表直观识别异常值。
  • 需要结合其他方法验证结果。

优点

  • 直观明了,易于理解。
  • 可以结合其他方法验证结果。

缺点

  • 仅适用于小规模数据集。
  • 人为因素较多,可能带有主观偏差。

5. 基于密度的方法(Density-Based Methods)

介绍
通过数据点的密度来识别异常值,密度较低的点被视为异常值。常用算法如DBSCAN。

适用场景

  • 数据存在明显的聚类现象。
  • 连续型数据和离散型数据。

优点

  • 能识别不同密度的异常值。
  • 适用于高维数据。

缺点

  • 计算复杂度较高。
  • 对参数选择较为敏感。

6. 基于距离的方法(Distance-Based Methods)

介绍
通过计算数据点之间的距离来识别异常值,远离其他数据点的点被视为异常值。

适用场景

  • 数据点之间距离较为均匀。
  • 连续型数据。

优点

  • 简单易行,直观。
  • 能有效识别远离其他数据点的异常值。

缺点

  • 对数据集规模较为敏感。
  • 计算复杂度较高。

7. 基于聚类的方法(Clustering-Based Methods)

介绍
通过聚类算法(如K-means)识别异常值,未能归属到任何聚类的点被视为异常值。

适用场景

  • 数据具有明显的聚类特征。
  • 连续型数据和离散型数据。

优点

  • 能有效识别聚类之外的异常值。
  • 适用于高维数据。

缺点

  • 对参数选择较为敏感。
  • 计算复杂度较高。

8. 基于机器学习的方法(Machine Learning-Based Methods)

介绍
使用机器学习算法(如随机森林、支持向量机等)识别异常值,通过训练模型来检测异常。

适用场景

  • 数据集较大,异常值分布复杂。
  • 需要高准确率的异常值检测。

优点

  • 适用于复杂数据分布和高维数据。
  • 可以处理大量数据,识别准确率高。

缺点

  • 训练时间长,计算复杂度高。
  • 需要大量标签数据进行训练。

9. 孤立森林(Isolation Forest)

介绍
基于决策树的集成方法,通过随机分割数据,检测孤立点作为异常值。

适用场景

  • 数据集较大,异常值分布复杂。
  • 连续型数据和离散型数据。

优点

  • 能有效识别高维数据中的异常值。
  • 计算效率较高,适用于大规模数据。

缺点

  • 对参数选择较为敏感。
  • 需要大量数据进行训练。

10. 本地异常因子(Local Outlier Factor, LOF)

介绍
通过计算数据点在局部邻域中的密度偏差来识别异常值,密度显著低于邻域内其他点的点被视为异常值。

适用场景

  • 数据存在局部异常。
  • 连续型数据和离散型数据。

优点

  • 能识别局部密度异常值。
  • 适用于不同密度的聚类数据。

缺点

  • 计算复杂度较高。
  • 对参数选择较为敏感。

异常值处理方法

1. 删除异常值(Remove Outliers)

介绍
直接从数据集中删除检测到的异常值。

适用场景

  • 异常值比例较小,不影响整体数据。
  • 数据量较大,删除部分异常值不会造成数据不足。

优点

  • 简单直接,易于实现。
  • 不会引入任何偏差。

缺点

  • 可能会丢失有价值的信息。
  • 在异常值比例较大时,不适用。

2. 替换异常值(Replace Outliers)

介绍
用合理的数值(如均值、中位数等)替换检测到的异常值。

适用场景

  • 异常值对数据分析影响较大。
  • 需要保留数据集的完整性。

优点

  • 保持数据集的完整性。
  • 可以通过多种方法替换(如均值、中位数等)。

缺点

  • 可能引入新的偏差。
  • 需要选择合适的替换方法。

3. 平滑异常值(Smoothing Outliers)

介绍
使用平滑技术(如移动平均)减弱异常值的影响。

适用场景

  • 连续型数据,异常值对分析结果有显著影响。
  • 需要平滑数据,减少波动。

优点

  • 减少数据的波动性。
  • 保持数据集的完整性。

缺点

  • 可能丢失一些重要的异常信息。
  • 需要选择合适的平滑方法。

4. 标记异常值(Mark Outliers)

介绍
在数据集中标记异常值,以便在后续分析中单独处理。

适用场景

  • 异常值对数据分析有特定意义。
  • 需要保留异常值进行进一步分析。

优点

  • 保留所有数据,不丢失信息。
  • 能在后续分析中单独处理异常值。

缺点

  • 需要在后续分析中处理标记数据。
  • 可能增加数据处理的复杂度。

5. 转换异常值(Transform Outliers)

介绍
通过数据转换(如对数变换)减弱异常值的影响,使数据更接近正态分布。

适用场景

  • 数据具有明显的非正态分布。
  • 需要标准化数据或转换为正态分布。

优点

  • 改善数据的分布,适应后续分析。
  • 减少异常值的影响。

缺点

  • 可能丢失部分数据的原始特征。
  • 需要选择合适的转换方法。

分类特征编码

One-Hot编码(One-Hot Encoding)

介绍: One-Hot编码是一种将分类特征转换为二进制向量的方法。对于每一个类别,创建一个长度为所有类别数的二进制向量,其中只有该类别对应的位置为1,其余位置为0。

适用场景

  • 分类特征没有自然的顺序或等级关系。
  • 特征的类别数不多(避免生成稀疏高维矩阵)。

优点

  • 避免了分类特征间的顺序关系,使得模型不会错误地理解类别之间的大小关系。
  • 对于大多数机器学习算法,尤其是线性模型和神经网络,效果较好。

缺点

  • 当类别数量较多时,会导致生成的特征矩阵非常稀疏,维度急剧增加,增加了计算和存储的开销。

示例: 假设有一个颜色特征,包含"红色"、"绿色"、"蓝色"三个类别:

颜色 One-Hot编码
红色 [1, 0, 0]
绿色 [0, 1, 0]
蓝色 [0, 0, 1]

Label编码(Label Encoding)

介绍: Label编码是一种将分类特征转换为整数的方法。为每一个类别分配一个唯一的整数值。

适用场景

  • 分类特征有自然的顺序或等级关系。
  • 类别数量较少,并且数值之间的大小关系对模型的影响不大。

优点

  • 简单易行,转换后的数据维度与原始数据相同,不会增加特征数量。
  • 对于有序分类数据(如低、中、高),能够保留类别之间的顺序信息。

缺点

  • 对于无序分类数据,可能会引入类别之间的大小关系,从而误导模型。
  • 不适用于需要避免类别之间顺序关系的算法,如线性回归。

示例: 假设有一个颜色特征,包含"红色"、"绿色"、"蓝色"三个类别:

颜色 Label编码
红色 0
绿色 1
蓝色 2

选择使用哪种编码

  1. 无序分类特征
    • 使用One-Hot编码。例如,性别(男、女),颜色(红、绿、蓝)等。
  2. 有序分类特征
    • 使用Label编码。例如,教育水平(小学、中学、大学),评级(差、一般、好)等。

总结

  • One-Hot编码:适用于无序分类特征,通过将每个类别转换为二进制向量,避免引入错误的顺序关系,但可能导致特征维度急剧增加。
  • Label编码:适用于有序分类特征,将每个类别转换为整数值,简单且不会增加特征维度,但可能会引入类别之间的大小关系,需要根据具体情况选择使用。

特征缩放(Feature Scaling)

介绍: 特征缩放是数据预处理中将特征值调整到相同量级的过程,目的是提高模型的性能和训练速度。常见的方法包括标准化(Standardization)和归一化(Normalization)。

常见方法

  1. 标准化(Standardization)

    • 介绍:将特征值调整到均值为0,标准差为1的标准正态分布。
    • 公式:$z = \frac{x - \mu}{\sigma}​$
      • $x$:原始特征值
      • $μ$:特征的均值
      • $\sigma$:特征的标准差
    • 适用场景:适用于大多数机器学习算法,尤其是那些依赖特征间距离的算法,如支持向量机(SVM)、K近邻(KNN)、线性回归等。
  2. 归一化(Normalization)

    • 介绍:将特征值缩放到[0, 1]或[-1, 1]的固定范围内。
    • 公式:$x' = \frac{x - x_{min}}{x_{max} - x_{min}}​​$
      • $x$:原始特征值
      • $x_{min}​$:特征的最小值
      • $x_{max}​$:特征的最大值
    • 适用场景:适用于对数值范围敏感的算法,如神经网络和基于梯度下降的算法。
  3. 最大绝对值缩放(MaxAbs Scaling)

    • 介绍:将特征值缩放到[-1, 1]之间,保留数据的稀疏性。
    • 公式:$x' = \frac{x}{|x_{max}|}$
      • $x$:原始特征值
      • $|x_{max}|$:特征的绝对最大值
    • 适用场景:适用于稀疏数据集和需要保留数据稀疏性的算法。
  4. 分位数缩放(Robust Scaling)

    • 介绍:利用中位数和四分位数间距进行缩放,对异常值不敏感。
    • 公式:$x' = \frac{x - \text{median}(x)}{IQR}$
      • $IQR$:四分位数间距(Q3 - Q1)
    • 适用场景:适用于包含异常值的数据集。

特征工程(Feature Engineering)

介绍: 特征工程是数据预处理中通过创建、转换和选择特征来提高模型性能的过程。特征工程通常包括特征创建、特征转换和特征选择三个方面。

特征创建(Feature Creation)

  • 介绍:通过已有特征生成新的特征。
  • 方法
    • 多项式特征:将特征进行多项式组合,生成新的特征。
    • 交互特征:特征之间进行相乘或相除,生成交互特征。
    • 时间特征:从时间戳中提取小时、天、月等特征。

特征转换(Feature Transformation)

  • 介绍:对特征进行数学或统计变换,使其更适合模型。
  • 方法
    • 对数变换:适用于有偏分布的特征。
    • 平方根变换:适用于减小特征范围和处理有偏分布。
    • Box-Cox变换:适用于数据接近正态分布。

特征选择(Feature Selection)

  • 介绍:选择对模型训练最有用的特征,减少特征数量,避免过拟合。
  • 方法
    • 过滤法(Filter Method):通过统计特性选择特征,如方差阈值、卡方检验、互信息等。
    • 包装法(Wrapper Method):通过模型性能选择特征,如递归特征消除(RFE)。
    • 嵌入法(Embedded Method):通过模型自身选择特征,如Lasso回归、树模型的特征重要性。

特征工程的优点

  • 提高模型性能:通过更有效的特征表示,提高模型的预测能力。
  • 减少模型复杂度:通过特征选择和特征转换,减少模型复杂度,避免过拟合。
  • 提高训练速度:通过减少特征数量,提高模型训练和预测速度。

特征工程的缺点

  • 时间消耗:特征工程过程复杂,需要花费大量时间进行尝试和验证。
  • 依赖领域知识:需要对数据和业务有深入了解,才能创造出有效的特征。
  • 数据泄露风险:不当的特征工程可能导致数据泄露,影响模型的泛化能力。

交叉验证(Cross-Validation)

介绍
交叉验证是一种模型验证技术,用于评估统计模型在独立数据集上的表现。它通过将数据集分成多个子集,以避免过拟合和提高模型的泛化能力。交叉验证常用于模型选择、参数调优和评估模型性能。

常见的交叉验证方法

1. K折交叉验证(K-Fold Cross-Validation)

介绍
将数据集分成K个等份(称为折),每次使用K-1个折进行训练,剩下的一个折进行验证。重复K次,每次选择不同的折进行验证。最终的模型性能通过K次验证的平均值来评估。

适用场景

  • 通常适用于大多数机器学习模型。
  • 数据量适中。

优点

  • 充分利用数据,避免过拟合。
  • 平均性能评价结果更稳定。

缺点

  • 计算成本较高,尤其是当K值较大时。
  • 需要进行K次模型训练和验证。

2. 留一法交叉验证(Leave-One-Out Cross-Validation, LOOCV)

介绍
特殊的K折交叉验证,K等于数据集的样本数。每次使用一个样本作为验证集,其余样本作为训练集。重复N次(N为样本数量),每次选择不同的样本进行验证。

适用场景

  • 数据集较小。
  • 需要精确评估模型性能。

优点

  • 最大限度利用数据。
  • 结果具有较小的偏差。

缺点

  • 计算成本极高,特别是对于大数据集。
  • 训练时间长。

3. 分层K折交叉验证(Stratified K-Fold Cross-Validation)

介绍
与K折交叉验证类似,但在划分数据集时,确保每个折中的类别比例与原始数据集相同,适用于分类问题。

适用场景

  • 分类问题,尤其是类别不平衡的数据集。

优点

  • 保持类别分布一致,评估结果更可靠。
  • 避免类别不平衡对模型评价的影响。

缺点

  • 与K折交叉验证相比,计算成本相同。

4. 留P法交叉验证(Leave-P-Out Cross-Validation, LPOCV)

介绍
将数据集中的P个样本留作验证集,其余作为训练集。重复所有可能的选择组合,评估模型性能。

适用场景

  • 小数据集。
  • 需要非常精确的模型评估。

优点

  • 精确评估模型性能。
  • 利用所有可能的训练/验证组合。

缺点

  • 计算成本极高。
  • 不适合大数据集。

5. 随机分割交叉验证(Shuffle-Split Cross-Validation)

介绍
随机地将数据集分为训练集和验证集,重复多次,每次随机划分。

适用场景

  • 数据量较大。
  • 需要快速评估模型。

优点

  • 随机分割,多次评估,结果更稳定。
  • 计算成本相对较低。

缺点

  • 与K折交叉验证相比,可能不能充分利用所有数据。

交叉验证的优点

  • 避免过拟合:通过多次训练和验证,评估模型的泛化能力。
  • 全面利用数据:每次训练和验证使用不同的数据集,充分利用所有样本。
  • 模型评估稳定:通过多次验证的平均性能,得到更稳定和可靠的评估结果。

交叉验证的缺点

  • 计算成本高:需要进行多次训练和验证,尤其是对于大数据集或复杂模型。
  • 时间消耗大:多次训练和验证过程可能耗费大量时间。

交叉验证的应用

  1. 模型选择:比较不同模型的性能,选择最佳模型。
  2. 参数调优:在不同参数设置下评估模型性能,选择最佳参数组合。
  3. 性能评估:通过交叉验证评估模型在未见数据上的表现,估计模型的泛化误差。

总结

交叉验证是一种重要的模型验证技术,通过多次训练和验证,全面评估模型的性能和泛化能力。根据数据集的特点和应用场景,可以选择合适的交叉验证方法,以提高模型评估的准确性和可靠性。

标签:场景,验证,特征,数据,适用,异常,预处理
From: https://www.cnblogs.com/FlyPenguin/p/18249158

相关文章

  • 接口自动化设计分享-动态连接数据库
    现在来说,自动化的尽头是平台,尽量的在可视化界面操作用例,执行,管理。但是基础要打牢,面对应需求搭建稳定,易扩展,较全面,能落地的框架不易。最近做新项目,自己在搭建了python接口自动化,如果做到在python+excel的易用接近平台使用也是不错的事情动态连接数据库由于我的测试用例......
  • MySQL导出数据库脚本
    1在Navicat中找到项目对应的数据库(如:booksystem)→右键转储SQL文件→结构和数据注意:information_schema、mysql、performance_schema、sys这4个库是MySQL自己的,不是你项目的,不要打开或破坏它们2在弹出的另存为对话框中选择一个位置并点击保存......
  • 【C++ | const成员】一文了解类的 const数据成员、const成员函数、const对象、mutable
    ......
  • OpenGauss数据库-4.表的创建、修改与删除
    第1关:创建表gsql-dpostgres-Ugaussdb-W'passwd123@123'createdatabasetestdb;\ctestdb;passwd123@123createtabletest_table(test_idintegernotnull,test_infochar(36));第2关:修改表 gsql-dtestsb-Ugaussdb-W'passwd123@123'alte......
  • JVM运行时数据区(线程相关)
    一、JVM运行时数据区JVM运行时数据区是一个抽象概念,主要依赖于寄存器、高速缓存、主内存几个部分组成。计算机运行=指令+数据,指令用于执行方法,数据用于指向存放的数据和对象。虚拟机栈---用于执行java方法本地方法栈---执行本地方法(通常时c语言实现的)程序计数......
  • 传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解
    内置数据源我们回顾一下druid数据源的配置方式通过type属性指定数据源的类型导入依赖starter就使用了spring的自动装配功能格式二是在引入druid的依赖的基础上进行的一种配置方式Tomcat内部也可以进行数据源的配置轻量级中最快的数据源对象我们切换德鲁伊连接池......
  • 用户画像数据仓库建设实践
    一、数据仓库1.1简介  简而言之,数据仓库是一个集成的、面向主题的、相对稳定的数据集合,它能够反映数据的历史变化。在构建数据仓库时,我们会根据不同的主题域对数据进行分类,并通过数据建模技术对数据进行重新组织和抽象,以便从更高的层次对分析对象进行一致且完整的描述......
  • 【基于Transformer的多输出数据回归预测】附核心代码讲解及核心源码
    文章目录前言Transformer模型结构概览代码模块解释模块功能详解总结前言  在深度学习领域,Transformer模型以其独特的机制和优越的性能在自然语言处理(NLP)任务中占据了主导地位。这里我们提供了一个简化版的Transformer模型的实现,让你在一分钟内快速理解并上手Tra......
  • R语言数据分析案例27-使用随机森林模型对家庭资产的回归预测分析
    一、研究背景及其意义家庭资产分析在现代经济学中的重要性不仅限于单个家庭的财务健康状况,它还与整个经济体的发展紧密相关。家庭资产的增长通常反映了国家经济的整体增长,而资产分布的不均则暴露了经济不平等的问题。因此,全球视角下的家庭资产分析可以揭示国际经济动态,有助于......
  • python数据分析-淘票票电影可视化
    一、研究背景和意义在当今数字化和媒体饱和的时代,电影产业不仅是文化的重要组成部分,也是全球经济的一大推动力。电影不仅能够反映社会现实和文化趋势,还能预示和塑造公众的兴趣与期待。因此,深入分析电影数据集具有重要的实践和理论意义。通过对电影数据进行描述性统计分析,在电......