У меня есть pandas DataFrame с 86 тыс. строк, 5 функциями и 1 целевым столбцом. Я пытаюсь обучить DecisionTreeClassifier, используя 70% DataFrame в качестве данных для обучения, и получаю ошибку MemoryError из метода подгонки. Я пытался изменить некоторые параметры, но я действительно не знаю, что вызывает ошибку, поэтому я не знаю, как с ней справиться. У меня Windows 10 с 8 ГБ ОЗУ.
Код
train, test = train_test_split(data, test_size = 0.3)
X_train = train.iloc[:, 1:-1] # first column is not a feature
y_train = train.iloc[:, -1]
X_test = test.iloc[:, 1:-1]
y_test = test.iloc[:, -1]
DT = DecisionTreeClassifier()
DT.fit(X_train, y_train)
dt_predictions = DT.predict(X_test)
Ошибка
File (...), line 97, in <module>
DT.fit(X_train, y_train)
File "(...)\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sklearn\tree\tree.py", line 790, in fit
X_idx_sorted=X_idx_sorted)
File "(...)\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sklearn\tree\tree.py", line 362, in fit
builder.build(self.tree_, X, y, sample_weight, X_idx_sorted)
File "sklearn\trewe\_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 671612928 bytes
Та же ошибка возникает, когда я пробую RandomForestClassifier, всегда в строке, которая выполняет подгонку. Как я могу это решить?
y_train = train.iloc[:, -1:]
(добавив двоеточие в конце), чтобы ваши значения Y были формой (n, 1), а не просто (n,). Я не думаю, что это вызывает проблему, но я знаю, что видел предупреждения sklearn об этом раньше - person scnerd   schedule 21.06.2018realloc
, что означает, что он может пытаться увеличить размер существующего выделенного блока аналогичного размера... так что, возможно, 1-1,5 ГБ только для этого вещь, которую он выделяет. Ваши данные кажутся очень разумными по размеру, но этому дереву решений может просто потребоваться больше памяти. Попробуйте отключить некоторые процессы, занимающие много памяти, и/или перезагрузить компьютер, а затем повторить попытку. Chrome, например, может занимать огромное количество памяти, если у вас открыто много вкладок. Однако 8G должно быть достаточно для этой проблемы. - person scnerd   schedule 21.06.2018X_train.dtype
,X_train.shape
,Y_train.shape
иnumpy.unique(Y_train)
непосредственно перед выполнением.fit()
? 86 тыс. строк и 5 функций — это ничто, поэтому это не должно занимать так много оперативной памяти. - person Jon Nordby   schedule 23.06.2018