使用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类给我们的所有选项,那么让我们看一个例子。请考虑以下数据集:
从上图中可以看出,我们有两个'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中的数据集,您将看到这两个值已被其各自列中所有值的平均值替换:
这就是你如何轻松处理数据集中缺失数据的方法。