python - 如何克服 SVM 内存需求

标签 python scikit-learn svm

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

最佳答案

简而言之,如果不减小数据大小或增加机器上的 RAM,您将无法在此处使用 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 处理大型数据集的更多信息,您可以查看 Strategies to scale computationally: bigger data sklearn 文档中的页面。

关于python - 如何克服 SVM 内存需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33840569/

相关文章:

scikit-learn - 带有 class_weight=auto 的 SGDClassifier 在 scikit-learn 0.15 但不是 0.14 上失败

python - nltk tagged_words 意外参数

python - 在 Python 中动态导入模块并实例化类

python - 按增量器对文本列进行排序并枚举

python - 无法在Python中使用散点图正确绘制回归线

python-2.7 - 您可以从 scikit-learn 中的 DecisionTreeRegressor 获取选定的叶子吗

matlab - 如何在matlab中使用一类SVM?

r - 使用 SVM 在 R 中集成

matlab - 多类 SVM(一个对所有)

python - 使 python 类列表的列表索引成为可能