Pandas, ошибка памяти при попытке вычесть два массива - PullRequest
0 голосов
/ 30 апреля 2020

Я работал с большим набором данных с формой (345602,12), выполняя всевозможные анализы с помощью scikitlearn. У меня не было проблем, пока я не запустил RandomForestRegressor:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    test_size=0.4,
                                                    random_state=1)

forest = RandomForestRegressor(n_estimators=100,
                               criterion='mse',
                               random_state=1,
                                n_jobs=-1)

forest.fit(X_train, y_train)
y_train_pred = forest.predict(X_train)
y_test_pred = forest.predict(X_test)

Эта часть работает, в результате чего:

print(y_train.shape, y_train_pred.shape)
(207361,1) (207361,)   

print(y_test.shape, y_test_pred.shape)
(138241,1) (138241,)  

Затем, когда я попытался просто вычесть их:

A=y_train_pred - y_train
B=y_test_pred - y_test

Это точка, в которой происходит сбой.

MemoryError: Невозможно выделить 320. ГиБ для массива с формой (207361, 207361) и типом данных float64

Я нахожу это очень странным, поскольку я без проблем использовал этот инструмент с меньшим набором данных.

1 Ответ

2 голосов
/ 30 апреля 2020

Ну, я нашел проблему, это было легко. Проблема в форме массивов.

RandomForestRegressor возвратил прогнозы в виде строк r, а данные без данных - в виде одного из столбцов c. Поэтому при вычитании pandas создавал матрицу rx c вместо одного массива измерений. Ошибка устраняется путем транспонирования одной из пар значений.

A=y_train_pred - np.transpose(y_train)
B=y_test_pred - np.transpose(y_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...