任意离散化器#

The ArbitraryDiscretiser() 将变量值排序到由用户任意定义的连续区间中。因此,在设置离散器时,您必须提供一个字典,其中键为变量名,值为包含区间限制的列表。

The ArbitraryDiscretiser() 仅适用于数值变量。该离散器将检查用户输入的变量是否存在于训练集中,并将其转换为数值类型。

示例#

让我们来看看这个转换器是如何工作的。首先,让我们加载一个数据集并绘制一个连续变量的直方图。我们使用 Scikit-learn 自带的加利福尼亚住房数据集。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from feature_engine.discretisation import ArbitraryDiscretiser

X, y = fetch_california_housing( return_X_y=True, as_frame=True)

X['MedInc'].hist(bins=20)
plt.xlabel('MedInc')
plt.ylabel('Number of obs')
plt.title('Histogram of MedInc')
plt.show()

在下图中,我们看到了变量中位收入的直方图:

../../_images/medinc_hist.png

现在,让我们将变量离散化为任意确定的时间间隔。我们希望结果转换中的间隔为整数,因此我们将 return_boundaries 设置为 False

user_dict = {'MedInc': [0, 2, 4, 6, np.inf]}

transformer = ArbitraryDiscretiser(
    binning_dict=user_dict, return_object=False, return_boundaries=False)

X = transformer.fit_transform(X)

现在,我们可以继续绘制变换后的变量:

X['MedInc'].value_counts().plot.bar(rot=0)
plt.xlabel('MedInc - bins')
plt.ylabel('Number of observations')
plt.title('Discretised MedInc')
plt.show()

在下图中,我们可以看到每个区间的观测数量:

../../_images/medinc_disc_arbitrarily.png

请注意,在上图中,区间由数字表示。

另外,我们可以通过将 return_boundaries 设置为 True 来返回离散化变量的区间界限。

X, y = fetch_california_housing( return_X_y=True, as_frame=True)

user_dict = {'MedInc': [0, 2, 4, 6, np.inf]}

transformer = ArbitraryDiscretiser(
    binning_dict=user_dict, return_object=False, return_boundaries=True)
X = transformer.fit_transform(X)

X['MedInc'].value_counts().plot.bar(rot=0)
plt.xlabel('MedInc - bins')
plt.ylabel('Number of observations')
plt.title('Discretised MedInc')
plt.show()

在下图中,我们可以看到每个区间的观测数量:

../../_images/medinc_disc_arbitrarily2.png

离散化加编码

如果我们以整数形式返回区间值,离散器可以选择将转换后的变量作为整数或对象返回。为什么我们希望转换后的变量作为对象?

Feature-engine 中的分类编码器默认设计为处理对象类型的变量。因此,如果您希望进一步编码返回的区间,例如尝试获得变量与目标之间的单调关系,您可以通过将 return_object 设置为 True 来无缝地实现这一点。您可以在 这里 找到如何使用此功能的示例。

其他资源#

查看也:

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

../../_images/feml.png

机器学习的特征工程#











或者阅读我们的书:

../../_images/cookbook.png

Python 特征工程手册#














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