在(堆叠的)分类器上进行处理/特征工程时,可以使用特征的多类分类器吗?

时间:2019-04-11 18:26:26

标签: python scikit-learn pipeline feature-engineering

在堆叠分类器之上进行处理/特征工程时,可以使用特征的多类分类器吗?

用例: 您可以在多类分类问题中使用10个功能。这些功能之一是文字,其他是分类,数字和时间。

通过典型的流水线步骤可以实现9个功能:

类似于带有混合类型的sklearn列变压器:

numeric_features = ['age', 'fare']
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())])

categorical_features = ['embarked', 'sex', 'pclass']
categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))])

通过将文本特征传递到包含特定于域的训练矢量模型的文本管道中来对其进行“预处理”或设计。其输出是传递到输出分类概率(“ predict_proba”)的多分类器的100维向量/数组。

然后将这些概率与上述预处理器的功能组合,然后传递给分类器/堆栈分类器:

text_features = ['domain text']
text_transformer = Pipeline(steps=[
    ('text_vectors', (TextVectorizer() ),
    ('predict_prob',  DecisionTreeClassifier(params='awesome'))])

preprocessor = ColumnTransformer(
    transformers=[
        ('text', text_transformer, text_features),
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)])


clf = Pipeline(steps=[('preprocessor', preprocessor),
                      ('classifier', LogisticRegression(solver='lbfgs'))])

以几种不同的方式,我使用了sklearn mixins(BaseEstimator,TransformerMixin,ClassifierMixin)来创建自定义类或类来实现此目的,但是我不幸失败了。很多错误。似乎我无法在变压器类中使用分类器。

这是我多次尝试之一的例子

class TextVectorClassifierProba(ClassifierMixin,BaseEstimator, TransformerMixin):
    """ """

    def __init__(self):


        pass

    def transform(self, df, y=None):
        """The workhorse of this feature extractor"""
        vector = Pipeline(steps=[('word_vectorizer', TextVectorTransformer())
                         ,('classifier',DecisionTreeClassifier())])


        return vector.fit(df).predict_proba(df)

    def fit(self, df, y=None):
        """Returns `self` unless something different happens in train and test"""
        return self

真正的问题是: 然后,您可以在堆叠集成中对数据的子集进行拟合然后进行预测吗?

以几种不同的方式,我使用了sklearn mixins(BaseEstimator,TransformerMixin,ClassifierMixin)来创建自定义类来实现此目的,但是我不幸失败了。

这会真正起作用吗?有没有人见过这样的事情,或者我只是在做疯狂的事情?

任何见解或想法都会受到赞赏。

谢谢!

0 个答案:

没有答案