机器学习数据预处理:缺失值处理

在机器学习模型的训练过程中,使用高质量的数据至关重要。然而,收集到的大量数据并不总是适合直接用于训练。因此,需要进行预处理步骤,以确保数据按照机器学习模型的预期进行处理。在数据清洗中,处理缺失值是一个至关重要的步骤,需要准确填充缺失数据,以便机器学习模型能够如预期般学习数据中的模式。

学习目标

了解如何使用机器学习算法处理和填充缺失数据。熟悉数据填充过程中的步骤。本文是作为数据科学博客大赛的一部分发布的。

处理缺失值的常见方法

在处理缺失值时,最常见的几种方法包括:

  • 删除包含NULL值的行。如果可用的训练数据量很大,这是一种常用的技术,可以消除处理缺失数据的不便。
  • 用一些任意常数(如0等)填充NULL值。由于结果不太理想,这种方法在机器学习社区中很少使用。然而,在某些情况下,这种方法可能会产生良好的结果。
  • 根据训练数据的统计数据(如训练分布的平均值、方差等)用统计确定的值填充NULL值。这是填充缺失值最常用的方法。
  • 使用整个训练数据(不包含NULL值)通过机器学习算法预测NULL值。

统计方法的资源

由于本文侧重于预测缺失值而不是从数据集的分布中推断它们,因此下面汇总了上述三种处理/填充缺失值的方法的参考资料。这些资源可以帮助更好地理解何时何地使用每种方法。

“理解和处理缺失值”从基础开始,一直到处理最复杂的技术,并提供示例。此外,“Python中处理缺失值”讨论了处理缺失值的基础知识和重要概念。

从本质上讲,使用ML算法进行数据填充的问题大致分为两类:使用分类算法和回归算法。根据训练数据的类型,需要使用它来分类问题。本文将探讨如何使用分类算法,但使用回归算法是相同的(可以参考回归算法的示例)。为了使用ML算法解决数据集中的缺失值问题,数据需要经历包括预处理和建模在内的几个步骤。以下是使用ML算法填充缺失值的5个最常见分类步骤。

在高层次上,通过删除标签或y列,将数据集视为一个集合,并将其划分为两组,一个称为训练集,另一个称为测试集。这种划分是基于包含NULL值的行和不包含NULL值的行进行的。每个数据集进一步划分为X和y,以便有X_train、y_train、X_test和y_test。y_train和y_test是包含缺失值(待预测)的列。训练后,使用测试数据预测缺失值。下面的步骤将详细介绍这是如何工作的。

删除标签或y列后,数据集被划分为训练和测试。这种划分是参考数据集中每行的NULL值进行的。

import pandas as pd import numpy as np import matplotlib.pyplot as plt import sklearn # 使用pandas read_csv()函数读取CSV文件 df = pd.read_csv('/content/drive/MyDrive/TrainAndValid.csv/TrainAndValid.csv') # 从Gdrive导入数据,也可以通过下载Kaggle或以下链接访问: # https://drive.google.com/file/d/19B2HAK4Tlma-YhlJfXiXg-Wy1F68DSb8/view?usp=sharing # 了解数据集 df.info() # 查看df.describe()了解更多。

基于数据集中的NULL值划分数据集:

from sklearn.model_selection import train_test_split X_test = df.drop('UsageBand', axis=1) y_test = df['UsageBand'] df_train = df.dropna() X_train = df_train.drop('UsageBand', axis=1) y_train = df_train['UsageBand']

使用随机森林分类器模型进行建模以填充数据。

from sklearn.ensemble import RandomForestClassifier rfc = RandomForestClassifier() # 拟合模型 rfc.fit(X_train, y_train)

使用训练好的随机森林分类器模型,填充/预测分类列的类别值。

# 预测值 y_filled = rfc.predict(X_test) df['UsageBand'] = y_filled # 继续使用数据集来建模实际问题!
  • 将可用数据划分为训练和测试,以模拟一个ML算法来预测基于NULL值的缺失值。
  • 使用完整的训练和测试数据测试训练好的模型。
  • 作为连续性,使用填充后的数据集来模拟任何机器学习算法(由于缺失数据的存在,之前无法训练)来解决实际问题,即本例中预测汽车价格。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485