我对sklearn中的管道非常陌生,我遇到了这个问题:我有一个数据集,它混合了文本和数字,即某些列只有文本,其余的列有整数(或浮点数)。
我想知道是否有可能建立一个管道,在那里我可以调用文本功能上的LabelEncoder()
和数字列上的MinMaxScaler()
。我在网上看到的例子主要指向在整个数据集上使用LabelEncoder()
而不是在选择列上。这有可能吗?如果是这样的话,我们会非常感激任何指点。
最佳答案
我通常是用一个FeatureUnion
来完成的,用一个FunctionTransformer
来拉出相关的列。
重要提示:
您必须用def
定义您的函数,因为如果您想pickle您的模型,您不能在函数transformer中使用lambda
或partial
您需要用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/