在scikit学习中创建交互术语



在Python中创建交互项的方法肯定有很多,无论是直接使用numpypandas,还是像patsy这样的库。然而,我正在寻找一种创建交互术语scikit学习风格的方法,即以一种很好地配合其拟合-转换-预测范式的形式。我该怎么做?

让我们考虑在两个变量之间创建交互项的情况。

您可以使用FunctionTransformer类,如下所示:

import numpy as np
from sklearn.preprocessing import FunctionTransformer
# 5 rows, 2 columns
X = np.arange(10).reshape(5, 2)
# Appends interaction of columns at 0 and 1 indices to original matrix
interaction_append_function = lambda x: np.append(x, (x[:, 0] * x[:, 1])[:, None], 1)
interaction_transformer = FunctionTransformer(func=interaction_append_function)

让我们试试:

>>> interaction_transformer.fit_transform(X)
array([[ 0,  1,  0],
[ 2,  3,  6],
[ 4,  5, 20],
[ 6,  7, 42],
[ 8,  9, 72]])

现在您有了一个转换器,它可以很好地与sklearn.pipelinesklearn.compose等其他工作流配合使用。

当然,还有更多可扩展的方法来处理这一问题,但希望您能理解。

最新更新