Допустим, у меня есть набор данных с двумя числовыми столбцами, и я хотел бы добавить третий столбец, который является продуктом двух (или какой-либо другой функцией двух существующих столбцов). Я могу вычислить новую функцию, используя ColumnTransformer
:
tfs = make_column_transformer(
(FunctionTransformer(lambda X: np.sqrt(X[:,0] - X[:,1]).reshape(-1, 1)), ["colX", "colY"]),
)
(X
это pandas DataFrame
, поэтому индексация по именам столбцов. Также обратите внимание на reshape
, которые мне пришлось Может быть, у кого-то есть идея получше.)
Как написано выше, я хотел бы сохранить исходные функции (аналогичные тем, что делает sklearn.preprocessing.PolynomialFeatures
), т.е. использовать все 3 столбца для соответствия линейной модели ( или обычно используйте их в конвейере sklearn
). Как мне это сделать?
Например,
df = pd.DataFrame({'colX': [3, 4], 'colY': [2, 1]})
tfs = make_column_transformer(
(FunctionTransformer(lambda X: np.sqrt(X[:,0] - X[:,1]).reshape(-1, 1)), ["colX", "colY"]),
)
tfs.fit_transform(df)
дает
array([[1. ],
[1.73205081]])
, но я хотел бы получить массив, включающий исходные столбцы, чтобы передать это в pipeline
.
Единственный способ, который я мог придумать, - это FeatureUnion
с преобразованием идентичности для первых двух столбцов. Есть ли более прямой способ?
(я хотел бы создать конвейер, а не изменять DataFrame
, чтобы не забыть сделать аугментацию при вызове model.predict()
.)