我正在使用SGDClassifier
包裹的OneVsRestClassifier
进行多标签分类,而且我遇到了内存问题。这是我的代码:
clf = OneVsRestClassifier(SGDClassifier(loss='hinge', shuffle=True, alpha=0.000001, verbose=0, n_iter=5), n_jobs=1)
clf.fit(trainX, trainY)
trainX
是一个大的ndarray - 6mil x 100(浮动64)= 5 GB ram。大约有20,000个标签(因此创建了20,000个线性分类器),我的笔记本电脑有16 GB的RAM。
我可以毫无问题地加载trainX
和trainY
,但是当我开始使用分类器时,内存使用量会越来越高,我的计算机很快就会开始交换,我必须终止这个过程。我不明白为什么拟合SGDClassifier
会导致额外的内存使用,因为:
1)SGD一次通过算法提供1个样本,因此应该有最少的额外RAM使用量。如果我可以加载数据,我应该能够训练分类器(这是SGD的整点)。
2)SVM的系数很大,但不应引起问题20000x100
那么是什么导致这个问题呢? OneVsRestClassifier
做了一些使用大量内存的事情吗?我该怎么做才能解决这个问题?
谢谢。