我正在尝试使用 SGD 对大型数据集进行分类。由于数据太大而无法放入内存,我想使用partial_fit方法来训练分类器。我选择了适合内存的数据集样本(100,000 行)来测试fit与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))
然后我用相同的测试集测试这两个分类器。在第一种情况下,我得到 100% 的准确率。据我了解,SGD 默认通过训练数据 5 次(n_iter = 5)。
在第二种情况下,我必须将数据传递 60 次才能达到相同的精度。
为什么会有这种差异(5 vs. 60)?还是我做错了什么?