我有一个形状为57159x924的数组,我将其用作训练数据。在这924列中,有896列是地图项,其余标签为。我想对此使用逻辑回归,但是当我使用逻辑回归的拟合函数时,出现内存错误。我想这是因为我的计算机内存无法处理太多数据。有什么办法可以解决这个问题?
我要使用的代码是
document
.querySelectorAll("[class^=fontColor]")
.forEach(x => {
x.style.color = "#"+x.classList[0].replace(/^fontColor_/,"")
})
以下是错误
第21行,主要 lr.fit(train_set,train_label)
....
返回数组(a,dtype,copy = False,order = order) MemoryError
答案 0 :(得分:0)
您还没有提供足够的细节来真正理解问题或给出确切的答案,但是我希望有一些选择对您有所帮助:
saga
求解器会更好地处理您的情况。 编辑(由于评论中的讨论):
这是一种实用的解决方法,其中有一个非常简单(容易)的示例-
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
,但还有很多留给读者;-)
请注意,您可以控制的内容比我已经显示的要多(例如迭代次数等),因此您应该正确阅读SGDClassifier的文档。
要注意的另一件事是,有不同的批处理方法。我只是在每次迭代中随机抽取一个子集,但是有些人更喜欢确保数据中的每个点都被看到了相同的时间(例如,将数据混洗,然后对订单索引进行批处理等)。