在Python中创建交互项的方法肯定有很多,无论是直接使用numpy
或pandas
,还是像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.pipeline
或sklearn.compose
等其他工作流配合使用。
当然,还有更多可扩展的方法来处理这一问题,但希望您能理解。