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