【问题标题】:Does Sci-Kit learn's .fit(X,y) method work sequentially, if not how does it work?Sci-Kit learn 的 .fit(X,y) 方法是否按顺序工作,如果不是,它是如何工作的?
【发布时间】:2015-11-05 10:46:29
【问题描述】:

我正在使用 Sci-Kit learn 的 svm 库对图像进行分类。我想知道当我拟合测试数据时,它是按顺序工作还是会删除以前的分类材料并重新拟合新的测试数据。例如,如果我将 100 个图像拟合到分类器中,我可以继续然后依次拟合另外 100 个图像,或者 SVM 是否会删除它在原始 100 个图像上执行的工作。这对我来说很难解释,所以我将提供示例:

为了使 SVM 分类器适合 200 个图像,我可以这样做:

clf=SVC(kernel='linear')
clf.fit(test.data[0:100], test.target[0:100])
clf.fit(test.data[100:200], test.target[100:200])

或者我必须这样做:

clf=SVC(kernel='linear')
clf.fit(test.data[:200], test.target[:200])

我之所以想知道,是因为我在尝试一次使用 .fit(X, y) 处理太多图像时遇到了内存错误。那么是否可以按顺序使用拟合并向上“增加”我的分类器,以便在技术上对 10000 个图像进行训练,但一次只能训练 100 个。

如果可以,请确认并解释?如果不可能,请解释一下?

【问题讨论】:

  • 如果遇到内存错误,可以尝试降维和/或特征选择
  • 我已经使用了降维,但还没有尝试过特征选择。如果我再缩小图像,我可能会丢失必要的像素数据。

标签: python machine-learning dataset scikit-learn


【解决方案1】:

http://scikit-learn.org/stable/developers/index.html#estimated-attributes

最后提到的属性应该会被覆盖,当你 再次调用 fit 而不考虑任何先前的值: fit 应该是幂等的。

https://en.wikipedia.org/wiki/Idempotent

所以是的,第二次调用将删除旧模型并计算新模型。如果您了解python代码,您可以自己检查它。例如在 sklearn/svm/classes.py

我认为您需要minibatch 培训,但我没有看到 SVM 的 partial_fit 实现,可能是因为 scikit-learn 团队推荐 SGDClassifier 和 SGDRegressor 用于样本大小超过 100k 的数据集。 http://scikit-learn.org/stable/tutorial/machine_learning_map/,尝试按照here 的描述将它们与 minibatch 一起使用。

【讨论】:

  • 有什么方法可以不删除旧模型,而是添加它>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 2015-09-02
  • 2015-07-27
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多