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