我正在使用Sci-Kit学习的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张。
如果可以,请确认并解释一下?如果不可能请解释一下?
答案 0 :(得分:3)
http://scikit-learn.org/stable/developers/index.html#estimated-attributes
当您使用时,预计会覆盖最后提到的属性 第二次调用适合而不考虑任何先前的值: 适合应该是幂等的。
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所述的小批量使用它们。