假设我们有一个具有姓氏等特征的数据集:
arr['Surname'] = ['Smith', 'Jones', 'Johnson', 'Smith']
我想将此分类信息编码为新功能,例如:
arr['Surname_Count'] = [2, 1, 1, 2]
需要注意的是它是在 scikit-learn 管道中完成的。有没有不涉及滚动我自己的分区计数变压器的快速方法?
假设我们有一个具有姓氏等特征的数据集:
arr['Surname'] = ['Smith', 'Jones', 'Johnson', 'Smith']
我想将此分类信息编码为新功能,例如:
arr['Surname_Count'] = [2, 1, 1, 2]
需要注意的是它是在 scikit-learn 管道中完成的。有没有不涉及滚动我自己的分区计数变压器的快速方法?
可能会迟到,但我发现这个问题很有趣:
尝试:
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 管道中一样使用该矩阵。