使用SciKit Imputer处理机器学习训练数据集中的缺失数据

通常情况下,您会在数据科学(机器学习)项目中遇到一个数据集,其中至少有一列中缺少数据。在某些情况下,您可以通过将其从数据集中取出来忽略该行。但事实并非如此。有时候,这一行对于训练来说至关重要,可能是因为数据集本身非常小而且您不能丢失任何行,或者它可能包含一些重要数据,或者出于其他原因。

在这种情况下,一个非常重要的问题是,你如何填补空白?有许多方法可以解决这个问题,其中一种方法是使用SciKit的Imputer类。

从SciKit文档中可以看出,Imputer类的构造函数接受了一些参数。让我们了解这些是什么:

missing_values - 这是必须在数据集中替换的值。这可以是整数,也可以是NaN。如果未传递此值,则NaN将是默认值。因此,只要我们在数据集中有NaN,Imputer对象就会用新值替换它。

strategy - 这是我们将用于计算必须替换数据集中的NaN事件的值的策略。我们可以使用三种不同的策略:

  • 均值
  • 中位数
  • most_frequent

“mean(均值)”是此处的默认值。在所有三种情况下,将计算所需的值并替换旧值。

  • axis - 这可以取两个值中的一个 - 0和1.这将决定Imputer是沿着行还是沿着列应用策略。列为0,行为1。
  • verbose - 这只会决定Imputer的详细程度。默认情况下,它设置为0。
  • copy - 这将决定是否必须创建原始对象的副本,或者Imputer是否应该就地更改数据集。默认情况下,它设置为True。

既然我们知道了Imputer类给我们的所有选项,那么让我们看一个例子。请考虑以下数据集:

使用SciKit Imputer处理机器学习训练数据集中的缺失数据

从上图中可以看出,我们有两个'nan',第二列和第三列各一个。我们需要计算这两个单元格的值。对于这个例子,我们将使用策略'mean'并沿着列进行输入,因为沿行输入在这里没有任何意义。Python代码如下:

from sklearn.preprocessing import Imputer

imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)

imputer = imputer.fit(X[:, 1:3])

X[:, 1:3] = imputer.transform(X[:, 1:3])

现在,如果您查看存储在X中的数据集,您将看到这两个值已被其各自列中所有值的平均值替换:

使用SciKit Imputer处理机器学习训练数据集中的缺失数据

这就是你如何轻松处理数据集中缺失数据的方法。

相关推荐