可以在scikit-learn管道中同时训练估计器吗?

在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将你的转换器组合在一起。

不过,需要注意的是:这种技术被称为堆叠,当所有分类器使用相同的数据进行训练时,容易过拟合,因此你可能需要编写更复杂的代码,将训练集划分为两部分:一部分用于拟合基础预测器,另一部分用于拟合元学习器(结合基础预测的那个)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注