python sklearn中的fit方法

时间:2016-01-11 17:49:16

标签: python model scikit-learn

我问自己关于sklearn中的fit方法的各种问题。

问题1:当我这样做时:

from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD()
svd_1 = model.fit(X1)
svd_2 = model.fit(X2)

变量模型的内容在此过程中是否会发生变化?

问题2:当我这样做时:

from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD()
svd_1 = model.fit(X1)
svd_2 = svd_1.fit(X2)

svd_1发生了什么?换句话说,svd_1已经安装好了,我又适合了它,那么它的组件会发生什么呢?

2 个答案:

答案 0 :(得分:5)

问题1:变量模型的内容在此过程中是否发生了变化?

是。 fit方法修改对象。它返回对象的引用。因此,保重!在第一个示例中,所有三个变量modelsvd_1svd_2实际上都指向同一个对象。

from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD()
svd_1 = model.fit(X1)
svd_2 = model.fit(X2)
print(model is svd_1 is svd_2)  # prints True

问题2: svd_1发生了什么?

modelsvd_1引用相同的对象,因此第一个和第二个示例之间完全没有区别。

最后备注: 两个示例中发生的情况是fit(X1)的结果被fit(X2)覆盖,如answer by David Maust中所指出的那样。如果您希望将两个不同的模型拟合到两组不同的数据,则需要执行以下操作:

svd_1 = TruncatedSVD().fit(X1)
svd_2 = TruncatedSVD().fit(X2)

答案 1 :(得分:4)

fit上致电TruncatedSVD时。它将用新矩阵构建的组件替换组件。像[{3}}这样的scikit-learn中的一些估算器和变换器具有partial_fit,它将通过添加其他数据来逐步构建模型。