问题描述
我正在使用 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_union
和 FunctionTransformer(copy)
为每个特征制作了多个副本。这看起来很奇怪,除了 ExtraTreesClassifier
它将具有“引导”特征选择的效果。另请参阅 Issue 581 以解释为什么首先生成这些;基本上,添加副本在堆叠集成中很有用,而 TPOT 使用的遗传算法意味着它需要在探索此类集成之前先生成那些。建议对遗传算法进行更多迭代可能会清除此类伪影。
在那之后,事情变得简单了,我猜:您执行单变量特征选择,并拟合一个额外的随机树分类器。