在scikit-learn中拟合数据与转换数据

zep*_*lee 23 machine-learning scikit-learn

scikit-learn中,所有估算器都有一个fit()方法,并且根据它们是受监督还是无监督,它们也有一个predict()或一个transform()方法.

我正在为无监督的学习任务编写变换器,并且想知道是否有经验法则在哪里放置哪种学习逻辑.官方文件在这方面不是很有帮助:

fit_transform(X, y=None, **fit_params)
适合数据,然后转换它.

在这种情况下,拟合数据转换数据意味着什么?

inv*_*ion 39

拟合查找将用于转换数据的模型的内部参数.转换将参数应用于数据.您可以将模型拟合到一组数据,然后在完全不同的集合上对其进行转换.

例如,您将线性模型拟合到数据以获得斜率和截距.然后使用这些参数转换(即映射)xto的新值或现有值y.

fit_transform 只是对相同的数据执行这两个步骤.

一个scikit示例:您适合数据以查找主要组件.然后转换数据以查看它如何映射到这些组件:

from sklearn.decomposition import PCA

pca = PCA(n_components=2)

X = [[1,2],[2,4],[1,3]]

pca.fit(X)

# This is the model to map data
pca.components_

array([[ 0.47185791,  0.88167459],
       [-0.88167459,  0.47185791]], dtype=float32)

# Now we actually map the data
pca.transform(X)

array([[-1.03896057, -0.17796634],
       [ 1.19624651, -0.11592512],
       [-0.15728599,  0.29389156]])

# Or we can do both "at once"
pca.fit_transform(X)

array([[-1.03896058, -0.1779664 ],
       [ 1.19624662, -0.11592512],
       [-0.15728603,  0.29389152]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

  • 等等,那么转换和预测之间有什么区别? (3认同)
  • 我们以`PLSRegression`为例.它有`transform`和`predict`方法.`predict(X)`将学习的模型应用于`X`,并返回`y_pred`.`transform(X)`将维数减少应用于`X`,并返回`X_reduced`.`transform(X,y)`返回`X_reduced`和`y_pred` (3认同)

ldi*_*rer 5

正如其他答案所解释的那样,fit 不需要做任何事情(除了返回变压器对象之外)。在那里,所有变压器都具有相同的接口,并且可以很好地与管道之类的东西一起工作。
当然,某些变压器需要fit实际执行操作的方法(认为tf-idf,PCA ...)。
transform方法需要返回转换后的数据。

fit_transform是链接拟合和变换操作的便捷方法。您可以免费获得(!),方法是从中派生自定义的转换器类TransformerMixin并实现fittransform

希望这可以澄清一下。