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 происходит от необходимости вычитать среднее значение, которое будет числом с плавающей запятой, а не просто целым числом.
У вас будут отрицательные числа с масштабированным столбцом, потому что среднее значение будет нормализовано к нулю.