我问自己关于 sklearn 中拟合方法的各种问题。
问题 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已经被安装了,我又安装了它,那么它的组件发生了什么?
问题1:过程中变量模型的内容有变化吗?
是的。
fit
方法修改对象。并且它返回对该对象的引用。因此,要小心!在第一个示例中,所有三个变量 model
、svd_1
和 svd_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 发生了什么?
model
和 svd_1
指的是同一个对象,因此第一个示例和第二个示例之间绝对没有区别。
最后一句话: 这两个示例中发生的情况是
fit(X1)
的结果被 fit(X2)
覆盖,正如 David Maust 在 答案中指出的那样。如果您想让两个不同的模型适合两组不同的数据,您需要执行以下操作:
svd_1 = TruncatedSVD().fit(X1)
svd_2 = TruncatedSVD().fit(X2)
当您通过
fit
拨打 TruncatedSVD
时。它将用新矩阵构建的组件替换这些组件。 scikit-learn 中的一些估计器和转换器(例如 IncrementalPCA)具有 partial_fit
,它将通过添加额外数据来增量构建模型。