Я пытаюсь использовать онлайн (out-of-core) алгоритм обучения для задачи MNIST с помощью SGDClassifier Но мне кажется, что точность не всегда возрастает.MNIST и SGDClassifier classifer
Что я должен делать в этом случае? Сохранить как-то classifer с лучшими ? точность ли SGDClassifier сходящегося к некоторому оптимальному решению
Вот мой код:
import numpy as np
from sklearn.linear_model.stochastic_gradient import SGDClassifier
from sklearn.datasets import fetch_mldata
from sklearn.utils import shuffle
#use all digits
mnist = fetch_mldata("MNIST original")
X_train, y_train = mnist.data[:70000]/255., mnist.target[:70000]
X_train, y_train = shuffle(X_train, y_train)
X_test, y_test = X_train[60000:70000], y_train[60000:70000]
step =1000
batches= np.arange(0,60000,step)
all_classes = np.array([0,1,2,3,4,5,6,7,8,9])
classifier = SGDClassifier()
for curr in batches:
X_curr, y_curr = X_train[curr:curr+step], y_train[curr:curr+step]
classifier.partial_fit(X_curr, y_curr, classes=all_classes)
score= classifier.score(X_test, y_test)
print score
print "all done"
Я тестировал linearSVM против СГДА на MNIST нас используя 10k образцов для поезда и 10k для теста и получите 0,833 13,95 и 0,85 1,32, поэтому SGD быстрее, но менее точен.
#test linearSVM vs SGD
t0 = time.time()
clf = LinearSVC()
clf.fit(X_train, y_train)
score= clf.score(X_test, y_test)
print score
print (time.time()-t0)
t1 = time.time()
clf = SGDClassifier()
clf.fit(X_train, y_train)
score= clf.score(X_test, y_test)
print score
print (time.time()-t1)
также я нашел некоторую информацию здесь https://stats.stackexchange.com/a/14936/16843
UPDATE: более за один проход (10 проходов) через данные achived лучшую точность 90,8% .so это может быть решением. И еще одна особенность SGD заключается в том, что данные должны быть перетасованы перед передачей в классификатор.
Не могли бы вы отредактировать свой вопрос, чтобы добавить результат своего сценария, чтобы люди, у которых нет установленного скинара, все еще могут решить вопрос? Что вы наблюдаете и что вы ожидали бы вместо этого? – ogrisel
Вывод результата примерно 0,52 0,6 0,75 0,74 0,84 0,80 0,82 при его повышении, но затем он колеблется около 0,8 + -значения_сочетания, и я ожидаю, что он будет всегда увеличиваться до некоторого значения max_score и затем останавливается. – mrgloom
Вы можете найти уже расшифрованную версию набора данных MNIST здесь: http://mnist-decoded.000webhostapp.com/ – SomethingSomething