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

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

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.

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

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.        ]]

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

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

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

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

Другие вопросы по тегам