Scikit-learn
是否支持迁移学习?请检查以下代码。
模型clf
通过fit(X,y)
获得
模型clf2
能否基于clf
学习并通过fit(X2,y2)
进行迁移学习?
>>> from sklearn import svm>>> from sklearn import datasets>>> clf = svm.SVC()>>> X, y= ....>>> clf.fit(X, y)SVC()>>> import pickle>>> s = pickle.dumps(clf)>>> clf2 = pickle.loads(s)>>> clf2.fit(X2,y2)>>> clf2.predict(X[0:1])
回答:
在scikit-learn
的上下文中,没有所谓的迁移学习,而是有增量学习、持续学习或在线学习。
通过查看您的代码,您想要做的事情不会按您所想的方式工作。根据这个scikit-learn
文档:
多次调用
fit()
会覆盖之前通过任何fit()
学到的内容
这意味着对同一模型多次使用fit()
只会简单地覆盖所有先前拟合的系数、权重、截距(偏置)等。
然而,如果您想拟合数据集的一部分,然后通过拟合新数据来改进您的模型,您可以寻找包含partial_fit
API实现的估计器。
如果我们多次调用
partial_fit()
,框架将更新现有的权重而不是重新初始化它们。
在scikit-learn
中进行增量学习的另一种方法是寻找支持warm_start
参数的算法。
根据这个文档:
warm_start: bool, default=False
当设置为
True
时,复用上次调用fit()
的解决方案作为初始化,否则,只需擦除之前的解决方案。对liblinear
求解器无效。
另一个例子是随机森林回归器。