我对sklearn中的管道非常陌生,我遇到了这个问题:我有一个数据集,它混合了文本和数字,即某些列只有文本,其余的列有整数(或浮点数)。
我想知道是否有可能建立一个管道,在那里我可以调用文本功能上的LabelEncoder()和数字列上的MinMaxScaler()。我在网上看到的例子主要指向在整个数据集上使用LabelEncoder()而不是在选择列上。这有可能吗?如果是这样的话,我们会非常感激任何指点。

最佳答案

我通常是用一个FeatureUnion来完成的,用一个FunctionTransformer来拉出相关的列。
重要提示:
您必须用def定义您的函数,因为如果您想pickle您的模型,您不能在函数transformer中使用lambdapartial
您需要用FunctionTransformer初始化validate=False
像这样:

from sklearn.pipeline import make_union, make_pipeline
from sklearn.preprocessing import FunctionTransformer

def get_text_cols(df):
    return df[['name', 'fruit']]

def get_num_cols(df):
    return df[['height','age']]

vec = make_union(*[
    make_pipeline(FunctionTransformer(get_text_cols, validate=False), LabelEncoder()))),
    make_pipeline(FunctionTransformer(get_num_cols, validate=False), MinMaxScaler())))
])

关于python - sklearn管道 - 如何在不同的列上应用不同的转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39001956/

10-11 18:41