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

时间:2015-07-22 19:38:42

标签: machine-learning scikit-learn

scikit-learn中,所有估算工具都采用fit()方法,并且根据它们是受监督还是无人监督,它们还具有predict()transform()方法。

我正在为无监督的学习任务编写transformer,并且想知道是否有经验法则在哪里放置哪种学习逻辑。官方文档在这方面不是很有用:

  

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

在这种情况下,拟合数据转换数据的含义是什么?

3 个答案:

答案 0 :(得分:36)

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

例如,您将线性模型拟合到数据以获得斜率和截距。然后,您可以使用这些参数将x的新值或现有值转换(即映射)到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)

答案 1 :(得分:4)

正如其他答案所解释的那样,fit 不需要做任何事情(除了返回变换器对象)。它就是为了让所有变压器具有相同的界面,并与管道之类的东西很好地配合 当然,有些变形金刚需要fit方法(想想tf-idf,PCA ......)才能真正做到这一点。
transform方法需要返回转换后的数据。

fit_transform是一种方便的方法,可以对拟合和变换操作进行链接。您可以通过从TransformerMixin派生自定义变换器类并实现fittransform来免费获得它(!)。

希望这能澄清一点。

答案 2 :(得分:2)

在这种情况下,调用fit方法不会执行任何操作。正如您在this example中看到的那样,并非所有变换器都需要使用fittransform方法实际执行某些操作。我的猜测是scikit-learn中的每个类都应该实现拟合,变换和/或预测,以使其与包的其余部分保持一致。但我想这确实是一种矫枉过正。