如何克服SVM内存需求

时间:2015-11-21 06:48:20

标签: python scikit-learn svm

我在scikit-learn中使用SVM功能(LinearSVC)。我的数据集和功能数量非常大,但我的PC内存不足,导致交换,减慢了速度。请建议我如何处理这个问题(除了增加RAM)。

1 个答案:

答案 0 :(得分:1)

简而言之,在不减小数据大小或增加计算机内存的情况下,您将无法在此使用SVC。在scikit-learn(通过libsvm包装器)中实现,算法需要一次查看所有数据。

较大数据集的一个选项是通过partial_fit()方法转移到允许在线拟合的模型。与SVC非常接近的在线算法的一个示例是在sklearn.linear_model.SGDClassifier中实现的随机梯度下降分类器。通过其partial_fit方法,您可以一次调整一点数据,而不会遇到您在单批量算法(如SVC)中看到的那类内存问题。这是一个例子:

from sklearn.linear_model import SGDClassifier
from sklearn.datasets import make_blobs

# make some fake data
X, y = make_blobs(n_samples=1000010,
                  random_state=0)

# train on a subset of the data at a time
clf = SGDClassifier()
for i in range(10):
    subset = slice(100000 * i, 100000 * (i + 1))
    clf.partial_fit(X[subset], y[subset], classes=np.unique(y))

# predict on unseen data
y_pred = clf.predict(X[-10:])

print(y_pred)
# [2 0 1 2 2 2 1 0 1 1]

print(y[-10:])
# [2 0 1 2 2 2 1 0 1 1]

有关对大型数据集使用scikit-learn的更多信息,可以查看sklearn文档中的Strategies to scale computationally: bigger data页面。