Ошибка выделения памяти в склеарном случайном лесе классификации python - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь запустить sklearn случайную классификацию леса на 2,79,900 экземплярах, имеющих 5 атрибутов и 1 класс.Но я получаю ошибку выделения памяти при попытке запустить классификацию в строке соответствия, она не может обучить сам классификатор.Любые предложения о том, как решить эту проблему?

Данные a

x, y, день, неделя, Точность

x и y - это день, координаты которого является днем.месяца (1-30) неделя - это какой день недели (1-7), а точность - целое число

код:

import csv
import numpy as np
from sklearn.ensemble import RandomForestClassifier


with open("time_data.csv", "rb") as infile:
    re1 = csv.reader(infile)
    result=[]
    ##next(reader, None)
    ##for row in reader:
    for row in re1:
        result.append(row[8])

    trainclass = result[:251900]
    testclass = result[251901:279953]


with open("time_data.csv", "rb") as infile:
    re = csv.reader(infile)
    coords = [(float(d[1]), float(d[2]), float(d[3]), float(d[4]), float(d[5])) for d in re if len(d) > 0]
    train = coords[:251900]
    test = coords[251901:279953]

print "Done splitting data into test and train data"

clf = RandomForestClassifier(n_estimators=500,max_features="log2", min_samples_split=3, min_samples_leaf=2)
clf.fit(train,trainclass)

print "Done training"
score = clf.score(test,testclass)
print "Done Testing"
print score

ошибка:

line 366, in fit
    builder.build(self.tree_, X, y, sample_weight, X_idx_sorted)
  File "sklearn/tree/_tree.pyx", line 145, in sklearn.tree._tree.DepthFirstTreeBuilder.build
  File "sklearn/tree/_tree.pyx", line 244, in sklearn.tree._tree.DepthFirstTreeBuilder.build
  File "sklearn/tree/_tree.pyx", line 735, in sklearn.tree._tree.Tree._add_node
  File "sklearn/tree/_tree.pyx", line 707, in sklearn.tree._tree.Tree._resize_c
  File "sklearn/tree/_utils.pyx", line 39, in sklearn.tree._utils.safe_realloc
MemoryError: could not allocate 10206838784 bytes

1 Ответ

0 голосов
/ 28 ноября 2018

Из документа scikit-learn: "Значения по умолчанию для параметров, управляющих размером деревьев (например, max_depth, min_samples_leaf и т. Д.), Приводят к полностью выращенным и необрезанным деревьям, которые потенциально могут быть очень большими нанекоторые наборы данных. Чтобы уменьшить потребление памяти, сложность и размер деревьев должны контролироваться путем установки значений этих параметров. "

Я бы тогда попытался настроить эти параметры.Также вы можете попробовать мем.профилировщик или попробуйте запустить его в GoogleCollaborator, если на вашей машине слишком мало оперативной памяти.

...