作为 Sklearn 管道的一部分,我如何计算数据集中某个类别的出现次数

数据挖掘 Python scikit-学习 分类数据 编码
2022-03-10 20:50:34

假设我们有一个具有姓氏等特征的数据集:

arr['Surname'] = ['Smith', 'Jones', 'Johnson', 'Smith']

我想将此分类信息编码为新功能,例如:

arr['Surname_Count'] = [2, 1, 1, 2]

需要注意的是它是在 scikit-learn 管道中完成的。有没有不涉及滚动我自己的分区计数变压器的快速方法?

2个回答

可能会迟到,但我发现这个问题很有趣:

尝试:

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.pipeline import Pipeline
from sklearn.compose import make_column_transformer, make_column_selector as selector
from sklearn.preprocessing import FunctionTransformer, MinMaxScaler

iris = load_iris()
X, _ = iris.data, iris.target
X = pd.DataFrame(X, columns= iris.feature_names)

valores = ['Smith', 'Jones', 'Johnson']

np.random.seed(42)
X["categoria"] = np.random.choice(a = valores, size = X.shape[0])

给出:

在此处输入图像描述

要验证结果:

X.categoria.value_counts()

在此处输入图像描述

def f(series):
    mapeo = series.value_counts().to_dict()
    series = series.replace(mapeo)
    return series


preprocessor = make_column_transformer((MinMaxScaler(), selector(dtype_exclude= "object")),
                        (FunctionTransformer(lambda x: f(x)), selector(dtype_include= "object"))).fit(X)

pd.DataFrame(preprocessor.transform(X))

回报:

在此处输入图像描述

希望能帮助到你!

您可以查看Featuretools,这是一个用于自动化特征工程的开源 Python 框架。具体来说,它可以为您的数据集生成聚合功能,例如计数

在生成具有所需列的新特征矩阵后,您可以像在 scikit-learn 管道中一样使用该矩阵。