큰 데이터 세트를 분류하기 위해 SGD를 사용하려고합니다. 데이터가 너무 커서 메모리에 저장할 수 없기 때문에 partial_fit 메서드를 사용하여 분류자를 학습하고 싶습니다.Sklearn SGDClassifier 부분 맞춤
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))
난 후, 동일한 테스트 세트 모두 분류 테스트 : I는 맞는 대 partial_fit를 테스트하는 메모리에 적합한 데이터 세트 (10 행)의 샘플을 선택 하였다. 첫 번째 경우에는 100 %의 정확도를 얻습니다. 내가 알고 있듯이 SGD는 기본적으로 교육 데이터 (n_iter = 5)보다 5 배 이상 빠릅니다.
두 번째 경우 동일한 정확도에 도달하려면 데이터를 60 번 통과해야합니다.
왜이 차이가 있습니까 (5 대 60 대)? 아니면 내가 잘못하고있는거야?
은 자세한'부여 = 1' 당신에게 힌트를 줄 수있는 SGD 생성자에. –
첫 번째 경우 ("맞음")는 "- Epoch 5 Norm : 29.25, NNZ : 300, 바이어스 : -1.674706, T : 459595, 평균 손실 : 0.076786"으로 끝납니다. 두 번째 경우 (partial_fit)는 10 패스 후에 "- Epoch 1 Norm : 22.99, NNZ : 300, Bias : -1.999685, T : 1918, 평균 손실 : 0.089302"로 끝납니다. 나는 무엇을 찾고 있어야 하는가? thx –
평균 손실. 배치 케이스에서 더 빨리 떨어지는 지 확인하십시오. –