Форум сайта python.su
Добрый вечер,
такой вопрос: я хочу построить классификатор (Naive Bayes). у меня ок. 50 тыс. примеров (с классами) для обучения, 1852 параметрoв в каждом, храню их в виде:
[({feat1: val1, feat2: val2, ...}, classA), ({feat1: val1, feat2: val2, ...}, classB), ...]
Traceback (most recent call last):
File "add_values/add_values.py", line 39, in <module>
extract_features(features, get_token_set(for_set))
File "add_values/add_values.py", line 27, in extract_features
features[token]=(token in words[:-2])
MemoryError
def extract_features(features_file, token_set): featureset=[] for line in features_file: features={} words=line.strip().split(" ") for token in token_set: features[token]=(token in words[:-2]) features["concept"]=words[-2] featureset.append((features, words[-1])) return featureset
Отредактировано Nata (Янв. 14, 2013 20:29:09)
Офлайн
если много объектов можно использовать __slots__, но это вряд ли спасет
features[token]=(token in words[:-2])
(token in words[:-2])
Офлайн
NataПроблема не в словаре, а в списке словарей. Тем более features - небольшой.
я знаю, что словарь не самый экономный вариант для хранения данных, но их вроде не так много у меня.
def extract_features(features_file, token_set): for line in features_file: features = {} words = line.strip().split(" ") first_words = set(words[:-2]) for token in token_set: features[token] = token in first_words features["concept"] = words[-2] yield features, words[-1] ... features_gen = extract_features(features_file, token_set) classifier = nltk.classify.NaiveBayesClassifier.train(features_gen)
words[:-2]
Отредактировано reclosedev (Янв. 15, 2013 16:47:27)
Офлайн
спасибо, генератор помог :)
теперь другая проблема: не получается сохранить классификатор :(
temp = open("classifier.pickle", "wb") pickle.dump(classifier, temp) temp.close()
Traceback (most recent call last):
File "add_values.py", line 58, in <module>
pickle.dump(classifier, temp)
File "/usr/lib/python2.6/pickle.py", line 1362, in dump
Pickler(file, protocol).dump(obj)
File "/usr/lib/python2.6/pickle.py", line 224, in dump
self.save(obj)
...
File "/usr/lib/python2.6/pickle.py", line 247, in memoize
self.memo[id(obj)] = memo_len, obj
MemoryError
Офлайн
А сколько памяти в системе?
Возможно поможет использование cPickle c HIGHEST_PROTOCOL:
import cPickle as pickle ... pickle.dump(classifier, temp, pickle.HIGHEST_PROTOCOL)
Офлайн
Traceback (most recent call last):
File "add_values.py", line 66, in <module>
pickle.dump(classifier, temp, pickle.HIGHEST_PROTOCOL)
MemoryError
reclosedevвот meminfo
А сколько памяти в системе?
MemTotal: 4015900 kB
MemFree: 2345400 kB
Buffers: 142340 kB
Cached: 716740 kB
SwapCached: 0 kB
Active: 504488 kB
Inactive: 1016376 kB
...
Офлайн
import cPickle as pickle ... with open('classifier.pickle', 'wb') as f: pickler = pickle.Pickler(f, 1) pickler.fast = True pickler.dump(classifier)
Офлайн
все работает!!! (с Pickler для dump() и Unpickler для load() )
И pypy построил классификатор за 4 минуты !
спасибо большое!!!
Отредактировано Nata (Янв. 16, 2013 18:01:48)
Офлайн