Scikit-Learn MinMax не масштабируется - PullRequest
0 голосов
/ 26 мая 2018

Как масштабировать функцию scikit-learn MinMaxScaler, если у меня большой массив?Итак, давайте определим следующее

import numpy as np
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(0, 1))

и рассмотрим следующие наборы данных

Y_train # shape = (2358331,1)
X_train # shape = (2358331,302)

Теперь я могу масштабировать мой Y_train, используя

%%time
Y_train = scaler.fit_transform(Y_train)

, он работает нормально, и яget

CPU times: user 36.3 ms, sys: 104 ms, total: 141 ms
Wall time: 388 ms

Но когда я использую ту же команду для X_train, это занимает вечность, кажется, что время выполнения не линейно по отношению к количеству столбцов.Поэтому я попытался использовать цикл для выполнения скейлера для каждой функции.

for i in range(X_train.shape[1]):
  scaled_feature = 
    scaler.fit_transform(X_train[:,i].reshape(X_train.shape[0],1))
  X_train[:,i] = scaled_feature.reshape(X_train.shape[0],)

Но это также бесконечно.
Мой вопрос: почему так происходит?А у вас есть альтернатива для этой проблемы?

1 Ответ

0 голосов
/ 27 мая 2018

Ваша проблема связана с тем, что вы работаете с огромным количеством данных.

MinMaxScaler принимает параметр copy, который по умолчанию равен True.Это означает, что он сделает копию ваших данных.И ваши данные огромные .Если предположить, что каждая точка данных представляет собой 32-разрядное целое число, X_train составляет около 2,8 гигабайта.Все это уходит в память и копируется.Вы застряли в фазе копирования из-за избиения .

Как вы смягчите это?

  1. Вызовите конструктор с помощью copy=False.
  2. Если улучшения недостаточно, посмотрите numpy.memmap, который позволяет получить доступ к большим данным, хранящимся в памяти.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...