你没有给出足够的细节来真正了解问题或给出一个明确的答案,但这里有一些选择我希望有帮助:
- 可用的内存量可能是可配置的。
- 在培训所有 em>这些数据同时会在许多上下文中提高OOM问题,这就是常见做法是通过通过批量训练使用SGD(随机梯度下降)的原因,即仅引入数据的子集每次迭代并在随机意义上获得全局优化解决方案。如果我正在正确猜测,您正在使用sklearn.linear_model.LogisticRegression,它具有不同的“求解器”。也许
saga Solver将更好地处理您的情况。
- 其中还有其他实现,其中一些实施方案肯定以高度可配置的方式内置批处理选项。如果最糟糕的是最糟糕的,实现一个物流回归模型是相当简单的,然后你可以像馅饼一样容易批量。
编辑(由于CMETS中的讨论):
这是一个实用的方法,非常简单(且简单) -
from sklearn.linear_model import SGDClassifier
import numpy as np
import random
X1 = np.random.multivariate_normal(mean=[10, 5], cov = np.diag([3, 8]), size=1000) # diagonal covariance for simplicity
Y1 = np.zeros((1000, 1))
X2 = np.random.multivariate_normal(mean=[-4, 55], cov = np.diag([5, 1]), size=1000) # diagonal covariance for simplicity
Y2 = np.ones((1000, 1))
X = np.vstack([X1, X2])
Y = np.vstack([Y1, Y2]).reshape([2000,])
sgd = SGDClassifier(loss='log', warm_start=True) # as mentioned in answer. note that shuffle is defaulted to True.
sgd.partial_fit(X, Y, classes = [0, 1]) # first time you need to say what your classes are
for k in range(1000):
batch_indexs = random.sample(range(2000), 20)
sgd.partial_fit(X[batch_indexs, :], Y[batch_indexs])
在实践中,您应该仔细研究丢失和准确性,并使用合适的
while而不是
for,但对读者留下了很多东西; - )
请注意,您可以控制比我所显示的更多(就像迭代的数量等),因此您应该正确阅读@ 987654322的文档@。
另一件事要注意的是,有不同的批处理实践。每次迭代都刚刚拍摄了一个随机的子集,但是一些更喜欢确保数据中的每一点都已被看到相同的次数(例如,随着订单索引或其他东西批量批量批量。