python sklearn 中的拟合方法

fit method in python sklearn

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

问题一:当我做的时候:

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

变量模型的内容在这个过程中有没有变化?

问题二:当我做的时候:

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

svd_1 发生了什么事?换句话说,svd_1已经装好了,我又装了一遍,那么它的组件发生了什么?

当您在 TruncatedSVD 上致电 fit 时。它将用新矩阵构建的组件替换组件。 scikit-learn 中的一些估算器和转换器,例如 IncrementalPCA 有一个 partial_fit,它将通过添加额外的数据逐步构建模型。

问题一:变量模型的内容在这个过程中有没有变化?

是的。 fit 方法修改对象。它 returns 对象的引用。因此,保重!在第一个示例中,所有三个变量 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) 覆盖。如果你想让两个不同的模型适合两组不同的数据,你需要做这样的事情:

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