Python Pandas стандартизирует столбец для регрессии

У меня есть следующий ДФ:

Date       Event_Counts   Category_A  Category_B
20170401      982457          0           1
20170402      982754          1           0
20170402      875786          0           1

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

Я использую следующий код:

from sklearn import preprocessing
df['scaled_event_counts'] = preprocessing.scale(df['Event_Counts'])

Пока я получаю это предупреждение:

DataConversionWarning: Data with input dtype int64 was converted to float64 by the scale function.
  warnings.warn(msg, _DataConversionWarning)

кажется, это сработало; есть новая колонка. Однако у него есть отрицательные числа, такие как -1,3.

Я думал, что функция масштабирования вычитает среднее значение из числа и делит его на стандартное отклонение для каждой строки; затем добавьте минимум результата к каждой строке.

Разве это не работает для панд таким образом? Или мне следует использовать функцию normalize() или функцию StandardScaler()? Я хотел, чтобы столбец стандартизации имел шкалу от 0 до 1.

Благодарю вас


person jeangelj    schedule 17.04.2017    source источник


Ответы (2)


Я думаю, вы ищете sklearn.preprocessing.MinMaxScaler . Это позволит вам масштабироваться до заданного диапазона.

Итак, в вашем случае это будет:

scaler = preprocessing.MinMaxScaler(feature_range=(0,1))
df['scaled_event_counts'] = scaler.fit_transform(df['Event_Counts'])

Чтобы масштабировать весь df:

scaled_df = scaler.fit_transform(df)
print(scaled_df)
[[ 0.          0.99722347  0.          1.        ]
 [ 1.          1.          1.          0.        ]
 [ 1.          0.          0.          1.        ]]
person Grr    schedule 17.04.2017
comment
интересно! Я не знал, что такое существует, позвольте мне попробовать это - person jeangelj; 17.04.2017
comment
Я получаю эту ошибку с другим столбцом. Измените форму данных либо с помощью X.reshape(-1, 1), если ваши данные содержат одну функцию, либо с помощью X.reshape(1, -1), если они содержат один образец. - person jeangelj; 17.04.2017
comment
Я считаю, что вы можете применить этот метод ко всему фрейму данных. - person Grr; 17.04.2017
comment
У меня уже есть много столбцов в формате 0/1; поэтому я не собирался использовать его на всем df - person jeangelj; 17.04.2017
comment
Я не думаю, что это повлияет на столбцы, которые уже масштабированы до вашего диапазона. - person Grr; 17.04.2017

Масштабирование выполняется путем вычитания среднего значения и деления на стандартное отклонение каждого признака (столбца). Так,

scaled_event_counts = (Event_Counts - mean(Event_Counts)) / std(Event_Counts)

Предупреждение int64 to float64 возникает из-за необходимости вычесть среднее значение, которое будет числом с плавающей запятой, а не просто целым числом.

У вас будут отрицательные числа в масштабированном столбце, потому что среднее значение будет нормализовано до нуля.

person msitt    schedule 17.04.2017
comment
благодарю вас; и scale() из предварительной обработки делает именно это? - person jeangelj; 17.04.2017
comment
Да. При желании источник доступен здесь. - person msitt; 17.04.2017