我看到sklearn文档中同时提到了 transformer 和 estimator 。
这两个词有什么区别吗?
答案 0 :(得分:2)
Transformer是一种实现transform
方法的估算器。
让我通过在sklearn实现中遇到的示例来支持该声明。
sklearn.preprocessing.FunctionTransformer
类:这继承自其他两个类
TransformerMixin
,BaseEstimator
sklearn.preprocessing.PowerTransformer
类:这也继承自
TransformerMixin
,BaseEstimator
据我了解,估计器只是根据其fit
方法中实现的逻辑来获取数据,进行一些处理并存储数据。
注意:估计值不能直接用于预测值。他们甚至没有predict
方法。
在我对上述声明做更多解释之前,让我告诉您有关Mixin
类的信息。
Mixin类:这些类实现了混合设计模式。维基百科对此有很好的解释。您可以阅读它here。总而言之,这些是您编写的类,它们具有可在许多不同类中使用的方法。因此,您可以将它们写在一个类中,而只是在许多不同的类中继承(一种组合形式。请阅读这些链接-Link1 Link2)
在Sklearn中,有很多mixin类。仅举几例
ClassifierMixin
,RegressorMixin
,TransformerMixin
。
此处,TransformerMixin
是Transformer
中使用的每个sklearn
所继承的类。 TransformerMixin
类只有一个可以在每个转换器中重用的方法,即fit_transform
。
所有转换器都继承两个类,BaseEstimator
(具有fit
方法)和TransformerMixin
(具有fit_transform
方法)。而且,每个变压器都基于其功能具有transform
方法
我想这可以回答您的问题。现在,让我回答有关预测器的陈述。
每个模型类都有自己的predict
类,可以进行预测。
考虑LinearRegression
,KNeighborsClassifier
或任何其他Model类。它们都有声明的predict
函数。这用于预测。不是估算器。
答案 1 :(得分:1)
基本区别在于:
Transformer
以某种方式转换输入数据(X
)。 Estimator
通过使用输入数据(y
)预测一个或多个新值(X
)。 Transformer
和Estimator
都应该有一个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词汇表中:
管理模型估计和解码的对象...
估计器必须提供
fit
方法,并应提供set_params
和get_params
,尽管这些通常是由base.BaseEstimator
的继承提供的。
支持
transform
和/或fit_transform
...的估算器
就像@VivekKumar的回答一样,我认为有一种趋势是将单词估算器用于sklearn
而不是“ predictor”:
支持
predict
和/或fit_predict
的估算器。这包括分类器,回归器,离群值检测器和聚类器...
答案 3 :(得分:0)
根据mixin class of Transformer和base class of Estimator:
Transformer
的方法为fit_transform()
。
Estimator
具有方法get_params()
和set_params()
。
与spark不同,sklearn中Transformer
中的对象通常也是Estimator
中的对象。
因为这些方法相互兼容和互补。例如,MinMaxScaler。