ArbitraryNumberImputer#

The ArbitraryNumberImputer() 用用户确定的任意数值替换缺失数据。它仅适用于数值变量。

The ArbitraryNumberImputer() 可以自动查找并填充所有数值变量。或者,你可以将想要填充的变量列表传递给 variables 参数。

你可以用相同的数字来填补所有变量,在这种情况下,你需要在 variables 参数中定义要填补的变量,并在 arbitrary_number 参数中定义填补的数字。例如,你可以用 99 来填补 varA 和 varB,如下所示:

transformer = ArbitraryNumberImputer(
        variables = ['varA', 'varB'],
        arbitrary_number = 99
        )

Xt = transformer.fit_transform(X)

你也可以用不同的数值来填补不同的变量。要做到这一点,你需要传递一个字典,其中包含变量名称和用于填补的数值到 imputer_dict 参数。例如,你可以用1填补varA,用99填补varB,如下所示:

transformer = ArbitraryNumberImputer(
        imputer_dict = {'varA' : 1, 'varB': 99}
        )

Xt = transformer.fit_transform(X)

下面是一个使用房价数据集的代码示例(关于数据集的更多详情 请点击这里)。

首先,让我们加载数据并将其分为训练集和测试集:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

from feature_engine.imputation import ArbitraryNumberImputer

# Load dataset
data = pd.read_csv('houseprice.csv')

# Separate into train and test sets
X_train, X_test, y_train, y_test = train_test_split(
                            data.drop(['Id', 'SalePrice'], axis=1),
                            data['SalePrice'],
                            test_size=0.3,
                            random_state=0,
                            )

现在我们设置 ArbitraryNumberImputer() 来用数字 -999 填补数据集中的两个变量:

# set up the imputer
arbitrary_imputer = ArbitraryNumberImputer(
    arbitrary_number=-999,
    variables=['LotFrontage', 'MasVnrArea'],
    )

# fit the imputer
arbitrary_imputer.fit(X_train)

使用 fit() 方法时,转换器不会学习任何参数。它只是将插补值分配给每个变量,这些值可以在属性 imputer_dict_ 中找到。

通过转换,我们用任意值替换训练集和测试集中的缺失数据:

# transform the data
train_t= arbitrary_imputer.transform(X_train)
test_t= arbitrary_imputer.transform(X_test)

需要注意的是,在插补之后,如果缺失值的百分比相对较大,变量分布将与原始分布有所不同(红色表示插补的变量):

fig = plt.figure()
ax = fig.add_subplot(111)
X_train['LotFrontage'].plot(kind='kde', ax=ax)
train_t['LotFrontage'].plot(kind='kde', ax=ax, color='red')
lines, labels = ax.get_legend_handles_labels()
ax.legend(lines, labels, loc='best')
../../_images/arbitraryvalueimputation.png

附加资源#

在下面的 Jupyter 笔记本中,您将找到关于 ArbitraryNumberImputer() 功能的更多详细信息,包括如何自动选择数值变量。您还将看到如何导航转换器的不同属性。

有关此方法和其他特征工程方法的更多详细信息,请查看以下资源:

../../_images/feml.png

机器学习的特征工程#











或者阅读我们的书:

../../_images/cookbook.png

Python 特征工程手册#














我们的书籍和课程都适合初学者和更高级的数据科学家。通过购买它们,您正在支持 Feature-engine 的主要开发者 Sole。