在scikit-learn中是否可以实现以下操作?我们使用给定的特征到目标的映射来训练估计器A,然后使用相同的数据(或映射)来训练另一个估计器B,接着我们将两个已训练的估计器(A和B)的输出作为输入用于训练估计器C,并使用之前相同的目标作为目标。
换句话说,我们训练两个估计器(预测器),然后尝试将来自估计器A和B的“弱”预测结合起来,得到更好的(“更强”的)预测。为了找到结合这两种预测(来自估计器A和B)的最佳方式,我们使用另一种训练方法(实际上,我们自动学习如何结合给定的预测)。
因此,我们有以下结构:
A -> CB -> C
现在,我希望拥有相同的“树”形估计器结构。然而,我希望同时训练它们。我的意思是,估计器A和B的专业性不应通过它们预测目标的能力来评估。我希望通过它们改善来自估计器C的预测的能力来评估这两个估计器的专业性。
回答:
你可以编写自己的转换器,将输入转换为预测。类似这样:
class PredictionTransformer(sklearn.base.BaseEstimator, sklearn.base.TransformerMixin): def __init__(self, estimator): self.estimator = estimator def fit(self, X, y): self.estimator.fit(X, y) return self def transform(self, X): return self.estimator.predict_proba(X)
然后你可以使用FeatureUnion
将你的转换器组合在一起。
不过,需要注意的是:这种技术被称为堆叠,当所有分类器使用相同的数据进行训练时,容易过拟合,因此你可能需要编写更复杂的代码,将训练集划分为两部分:一部分用于拟合基础预测器,另一部分用于拟合元学习器(结合基础预测的那个)。