sklearn中的转换器和估计器有什么区别?

时间:2019-02-27 06:52:07

标签: scikit-learn

我看到sklearn文档中同时提到了 transformer estimator

这两个词有什么区别吗?

4 个答案:

答案 0 :(得分:2)

Transformer是一种实现transform方法的估算器。

让我通过在sklearn实现中遇到的示例来支持该声明。

  1. sklearn.preprocessing.FunctionTransformer类:

这继承自其他两个类TransformerMixinBaseEstimator

  1. sklearn.preprocessing.PowerTransformer类:

这也继承自TransformerMixinBaseEstimator

据我了解,估计器只是根据其fit方法中实现的逻辑来获取数据,进行一些处理并存储数据。

注意:估计值不能直接用于预测值。他们甚至没有predict方法。

在我对上述声明做更多解释之前,让我告诉您有关Mixin类的信息。

Mixin类:这些类实现了混合设计模式。维基百科对此有很好的解释。您可以阅读它here。总而言之,这些是您编写的类,它们具有可在许多不同类中使用的方法。因此,您可以将它们写在一个类中,而只是在许多不同的类中继承(一种组合形式。请阅读这些链接-Link1 Link2

在Sklearn中,有很多mixin类。仅举几例 ClassifierMixinRegressorMixinTransformerMixin

此处,TransformerMixinTransformer中使用的每个sklearn所继承的类。 TransformerMixin类只有一个可以在每个转换器中重用的方法,即fit_transform

所有转换器都继承两个类,BaseEstimator(具有fit方法)和TransformerMixin(具有fit_transform方法)。而且,每个变压器都基于其功能具有transform方法

我想这可以回答您的问题。现在,让我回答有关预测器的陈述。

每个模型类都有自己的predict类,可以进行预测。

考虑LinearRegressionKNeighborsClassifier或任何其他Model类。它们都有声明的predict函数。这用于预测。不是估算器。

答案 1 :(得分:1)

基本区别在于:

  • Transformer以某种方式转换输入数据(X)。
  • Estimator通过使用输入数据(y)预测一个或多个新值(X)。

TransformerEstimator都应该有一个fit()方法,可以用来训练它们(它们学习数据的某些特征)。签名是:

fit(X, y)

fit()不返回任何值,只是将学习到的数据存储在对象内部。

此处X代表样本(特征向量),y是目标向量(X中每个对应样本可能具有单个或多个值)。请注意,y在某些不需要它的转换器中可以是可选的,但是对于大多数估计器(监督估计器)来说,它是必需的。以StandardScaler为例。它需要初始数据X来查找数据的均值和标准差(它了解X的特征,不需要y)。

每个Transformer应该具有一个transform(X, y)函数,该函数像fit()一样接受输入X并返回X的新转换版本(通常应具有相同数量的样本,但可能具有或不具有相同的特征。

另一方面,Estimator应该具有predict(X)方法,该方法应从给定的y输出X的预测值。

在scikit-learn中将有一些实现transform()predict()的类,例如KMeans,在这种情况下,仔细阅读文档应该可以解决您的疑问。

答案 2 :(得分:1)

sklearn的用法可能有点不直观,但是“估计器”并不意味着非常具体的东西:基本上所有东西都是估计器。

从sklearn词汇表中:

estimator

管理模型估计和解码的对象...

估计器必须提供fit方法,并应提供set_paramsget_params,尽管这些通常是由base.BaseEstimator的继承提供的。

transformer

支持transform和/或fit_transform ...的估算器

就像@VivekKumar的回答一样,我认为有一种趋势是将单词估算器用于sklearn而不是“ predictor”:

支持predict和/或fit_predict的估算器。这包括分类器,回归器,离群值检测器和聚类器...

答案 3 :(得分:0)

根据mixin class of Transformerbase class of Estimator

  • Transformer的方法为fit_transform()

  • Estimator具有方法get_params()set_params()

spark不同,sklearn中Transformer中的对象通常也是Estimator中的对象。 因为这些方法相互兼容和互补。例如,MinMaxScaler