Tôi đang cố gắng sử dụng SGD để phân loại một tập dữ liệu lớn. Vì dữ liệu quá lớn để vừa với bộ nhớ, tôi muốn sử dụng phương thức partial_fit để đào tạo trình phân loại. Tôi đã chọn một mẫu của các bộ dữ liệu (100.000 hàng) phù hợp vào bộ nhớ để kiểm tra phù hợp vs partial_fit:Sklearn SGDClassifier partial fit
from sklearn.linear_model import SGDClassifier
def batches(l, n):
for i in xrange(0, len(l), n):
yield l[i:i+n]
clf1 = SGDClassifier(shuffle=True, loss='log')
clf1.fit(X, Y)
clf2 = SGDClassifier(shuffle=True, loss='log')
n_iter = 60
for n in range(n_iter):
for batch in batches(range(len(X)), 10000):
clf2.partial_fit(X[batch[0]:batch[-1]+1], Y[batch[0]:batch[-1]+1], classes=numpy.unique(Y))
sau đó tôi thử nghiệm cả hai phân loại với một tập kiểm tra giống hệt nhau. Trong trường hợp đầu tiên, tôi nhận được độ chính xác 100%. Theo tôi hiểu nó, SGD theo mặc định vượt qua 5 lần so với dữ liệu huấn luyện (n_iter = 5).
Trong trường hợp thứ hai, tôi phải vượt qua 60 lần dữ liệu để đạt được cùng độ chính xác.
Tại sao sự khác biệt này (5 so với 60)? Hay tôi đang làm gì sai?
Give 'verbose = 1' để các nhà xây dựng SGD, mà có thể cung cấp cho bạn một gợi ý. –
Trường hợp đầu tiên (phù hợp) kết thúc bằng "- Epoch 5 Norm: 29.25, NNZs: 300, Bias: -1.674706, T: 459595, Mất trung bình: 0.076786". Trường hợp thứ hai (partial_fit) sau khi 10 lượt kết thúc bằng "- Epoch 1 Norm: 22.99, NNZs: 300, Bias: -1.999685, T: 1918, Mất trung bình: 0.089302". Tôi nên tìm gì? thx –
Mức lỗ trung bình. Kiểm tra xem nó giảm nhanh hơn trong trường hợp hàng loạt. –