tpot生成的pipeline说明

问题描述

我正在使用 tpotClassifier() 并将以下管道作为我的最佳管道。我附上了我得到的管道代码。有人可以解释管道流程和顺序吗?

import numpy as np
import pandas as pd
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.feature_selection import SelectFwe,f_classif
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline,make_union
from tpot.builtins import StackingEstimator
from sklearn.preprocessing import FunctionTransformer
from copy import copy

tpot_data = pd.read_csv('PATH/TO/DATA/FILE',sep='COLUMN_SEParaTOR',dtype=np.float64)
features = tpot_data.drop('target',axis=1)
                         training_features,testing_features,training_target,testing_target = \
                         train_test_split(features,tpot_data['target'],random_state=None)

exported_pipeline = make_pipeline(
make_union(
    FunctionTransformer(copy),make_union(
        FunctionTransformer(copy),make_union(
            FunctionTransformer(copy),make_union(
                FunctionTransformer(copy),FunctionTransformer(copy)
            )
        )
    )
),SelectFwe(score_func=f_classif,alpha=0.049),ExtraTreesClassifier(bootstrap=False,criterion="entropy",max_features=1.0,min_samples_leaf=2,min_samples_split=5,n_estimators=100)
)

exported_pipeline.fit(training_features,training_target)
results = exported_pipeline.predict(testing_features)

解决方法

make_union 只是联合多个数据集,而 FunctionTransformer(copy) 复制所有列。因此嵌套的 make_unionFunctionTransformer(copy) 为每个特征制作了多个副本。这看起来很奇怪,除了 ExtraTreesClassifier 它将具有“引导”特征选择的效果。另请参阅 Issue 581 以解释为什么首先生成这些;基本上,添加副本在堆叠集成中很有用,而 TPOT 使用的遗传算法意味着它需要在探索此类集成之前先生成那些。建议对遗传算法进行更多迭代可能会清除此类伪影。

在那之后,事情变得简单了,我猜:您执行单变量特征选择,并拟合一个额外的随机树分类器。