Scikit learn sklearn中变压器和估计器的区别是什么?

Scikit learn sklearn中变压器和估计器的区别是什么?,scikit-learn,Scikit Learn,我看到sklearn文档中提到了transformer和estimator 这两个词之间有什么区别吗?基本区别是: Transformer以某种方式转换输入数据(X) 估计器使用输入数据(X)预测一个(或多个)新值(y) 变压器和估计器都应该有一个fit()方法,可以用来训练他们(他们学习数据的一些特征)。签名为: fit(X, y) fit()不返回任何值,只将学到的数据存储在对象中 这里,X表示样本(特征向量),y是目标向量(在X中,每个对应样本可能有一个或多个值)。请注意,y在一些变

我看到sklearn文档中提到了transformerestimator


这两个词之间有什么区别吗?

基本区别是:

  • Transformer
    以某种方式转换输入数据(
    X
  • 估计器
    使用输入数据(
    X
    )预测一个(或多个)新值(
    y
变压器
估计器
都应该有一个
fit()
方法,可以用来训练他们(他们学习数据的一些特征)。签名为:

fit(X, y)
fit()
不返回任何值,只将学到的数据存储在对象中

这里,
X
表示样本(特征向量),
y
是目标向量(在
X
中,每个对应样本可能有一个或多个值)。请注意,
y
在一些变压器中是可选的,这些变压器不需要它,但对大多数估计器(监督估计器)是强制性的。例如,请看。它需要初始数据
X
来查找数据的平均值和标准(它学习
X
的特征,不需要
y

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

另一方面,
估计器
应该有一个
predict(X)
方法,该方法应该从给定的
X
输出
y
的预测值


scikit learn中会有一些类同时实现了
transform()
predict()
,在这种情况下,仔细阅读文档可以解决您的疑问。

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

让我用在sklearn实现中遇到的示例来支持这一说法

  • sklearn.preprocessing.FunctionTransformer
  • 这继承了另外两个类
    TransformerMixin
    BaseEstimator

  • sklearn.preprocessing.PowerTransformer
  • 这也继承自
    TransformerMixin
    BaseEstimator

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

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

    在我对上述语句进行更多解释之前,让我先告诉您有关
    Mixin
    类的内容

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

    在Sklearn中有许多mixin类。举几个例子
    ClassifierMixin
    RegressorMixin
    transformerMin

    这里,
    TransformerMixin
    是由
    sklearn
    中使用的每个
    Transformer
    继承的类
    TransformerMixin
    类只有一种方法可在每个转换器中重用,即
    fit\u transform

    所有转换器都继承两个类,
    BaseEstimator
    (具有
    fit
    方法)和
    transformerxin
    (具有
    fit\u transform
    方法)。并且,每个变压器都有基于其功能的
    变换
    方法

    我想这就回答了你的问题。现在,让我来回答我关于预测估计量的陈述

    每个模型类都有自己的进行预测的
    predict


    考虑
    线性回归
    KNeighborsClassifier
    ,或任何其他模型类。它们都有一个
    predict
    函数。这用于预测。不是估计器。

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

    从sklearn词汇表中:

    :

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

    估计器必须提供一个
    fit
    方法,并且应该提供
    set_-params
    get_-params
    ,尽管这些通常是通过继承
    base.BaseEstimator
    提供的

    :

    支持
    变换
    和/或
    拟合变换
    的估计器

    正如@VivekKumar的回答一样,我认为有一种倾向,即使用“估计器”这个词来表示
    sklearn
    所称的“估计器”:

    支持
    predict
    和/或
    fit\u predict
    的估计器。这包括分类器、回归器、离群点检测器和聚类器


    你的回答很有帮助。但是我仍然有一个问题:估计器=变压器+预测器吗?@blacksheep你所说的预测器是什么意思?能够做出预测的估计器那么估计器=变压器+预测器呢?伙计?@VivekKumar。。在探索sklearn代码之后,我刚刚回答了这个问题。你几乎是对的。但是,在mixin类的帮助下,并不是所有的it_transoform都得到支持。@InAFlash,是的,从代码库的角度来看,大多数估计器和转换器都是通过使用mixin
    BaseEstimator
    TransformerMixin
    (我对你的答案投了赞成票)