【问题标题】:Does Scikit-learn support transfer learning?Scikit-learn 是否支持迁移学习?
【发布时间】:2020-07-23 09:32:30
【问题描述】:

Scikit-learn 是否支持迁移学习?请检查以下代码。

模型clffit(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])

【问题讨论】:

  • 如果我错了,请纠正我,但迁移学习主要是底层机器学习算法/架构的属性。我只在深度学习的背景下知道它。我不确定用支持向量机谈论“迁移学习”是否有意义。
  • @cel :在我看来,迁移学习是关于保存模型的weightsarchitecture,然后调整这些权重以在不同的数据集上获得更低的成本。并且由于SVM会学习权重,根据特征和内核定义的SVM结构,“应该是一个有效的场景”
  • 虽然可能不是大多数人所说的迁移学习,但 sklearn 实现了一个朴素的回归链类 scikit-learn.org/stable/modules/generated/…,它使用来自链中较早模型的预测

标签: machine-learning scikit-learn


【解决方案1】:

scikit-learn 的上下文中,没有迁移学习本身,而是增量学习、持续学习或在线学习。

通过查看您的代码,无论您打算做什么都不会按照您在这里的想法进行。来自thisscikit-learn 文档:

多次调用fit() 将覆盖任何人学到的内容 以前的fit()

这意味着在同一模型上多次使用fit() 只会覆盖所有先前拟合的系数、权重、截距(偏差)等。

但是,如果您想拟合数据集的一部分,然后通过拟合新数据来改进模型,您可以寻找包含 partial_fit API 实现的 estimators

如果我们多次调用partial_fit(),框架会更新 现有的权重,而不是重新初始化它们。

使用scikit-learn 进行增量学习的另一种方法是寻找支持warm_start 参数的算法。

来自this文档:

warm_start: bool, default=False

设置为True时,复用 之前对fit() 的调用作为初始化,否则,只需擦除 以前的解决方案。对liblinear求解器无用。

另一个例子是Random forrest regressor

【讨论】:

  • 感谢您的回复!!
猜你喜欢
  • 1970-01-01
  • 2016-06-18
  • 2020-11-15
  • 2017-11-26
  • 1970-01-01
  • 2011-04-24
  • 2021-08-23
  • 2019-02-08
相关资源
最近更新 更多