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')
附加资源#
在下面的 Jupyter 笔记本中,您将找到关于 ArbitraryNumberImputer()
功能的更多详细信息,包括如何自动选择数值变量。您还将看到如何导航转换器的不同属性。
有关此方法和其他特征工程方法的更多详细信息,请查看以下资源:
或者阅读我们的书:
我们的书籍和课程都适合初学者和更高级的数据科学家。通过购买它们,您正在支持 Feature-engine 的主要开发者 Sole。