Sklearn SGDClassifier ajuste parcial
Estou tentando usar o SGD para classificar um grande conjunto de dados. Como os dados são grandes demais para caber na memória, eu gostaria de usar oparcial_fit método para treinar o classificador. Selecionei uma amostra do conjunto de dados (100.000 linhas) que cabe na memória para testarem forma vs.parcial_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))
Depois, testo os dois classificadores com um conjunto de testes idêntico. No primeiro caso, obtenho uma precisão de 100%. Pelo que entendi, o SGD, por padrão, passa 5 vezes nos dados de treinamento (n_iter = 5).
No segundo caso, tenho que passar 60 vezes sobre os dados para alcançar a mesma precisão.
Por que essa diferença (5 vs. 60)? Ou estou fazendo algo errado?