是否可以在scikit-learn中完成以下操作?我们使用给定的从特征到目标的映射来训练一个估计器A,然后我们使用相同的数据(或映射)来训练另一个估计器B,然后我们使用两个训练估计器(A和B)的输出作为估计器C的输入,作为目标,我们使用与之前相同的目标。
换句话说,我们训练两个估计器(预测器),然后我们尝试将来自估计器A和B的"弱"预测结合起来,以获得更好("更强")的预测。为了找到组合两种预测类型(来自估计器A和B)的最佳方法,我们使用另一种训练(事实上,我们以自动方式学习如何组合给定的预测)。
因此,我们有以下结构:A -> C
B -> C
现在,我想要有相同的估计"树"。然而,我想同时训练他们。我的意思是评估者A和B的专家不应该通过他们预测目标的能力来评估。相反,我想通过这两个评估者改进来自评估者c的预测的能力来评估他们的专业知识。
您可以编写自己的转换器,将transform
输入到预测中。像这样:
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
把你的变压器粘在一起。
也就是说,有一个警告:这种技术被称为堆叠,当所有分类器使用相同的数据训练时,很容易过度拟合,所以你可能想写一些更复杂的东西,将训练集分为两部分:一部分用于拟合基本预测器,另一部分用于拟合元学习器(结合基本预测)。