Различное поведение MinMaxScaler() в аналогичном диапазоне серий

#python #scikit-learn #data-science

#python #scikit-learn #наука о данных

Вопрос:

Я пытаюсь понять различное поведение MinMaxScaler от Sklearn для аналогичной серии.

У меня есть 2 набора серий, по 2 из которых в каждом, назовите это нормальным и новым. В каждом из наборов я хочу уменьшить их масштабы относительно друг друга для дальнейшей обработки. Итак, я использую объект MinMaxScaler одной серии для преобразования других серий, как в коде ниже.

 normal_ser = pd.read_csv(f"data1.csv")["normal"]

print("Series set 1")
print('nNormal ser')
print(f'Normal max: {normal_ser.max()}, Normal min: {normal_ser.max()}')
plt.figure(figsize=(20, 3))
plt.plot(normal_ser)
plt.show()

print("Normal Ser histogram")
normal_ser.hist()
plt.show()

print('new ser')
new_ser = df2.read_csv("data2.csv")["new"]
print(f'New max: {new_ser.max()}, New min: {new_ser.max()}')
plt.figure(figsize=(20, 3))
plt.plot(new_ser)
plt.show()

print("New Ser histogram")
new_ser.hist()
plt.show()

print('Normal ser scaled')
# Scaling new series data based on the normal data series
mm_scaler = MinMaxScaler()
normal_ser_scaled = mm_scaler.fit_transform(normal_ser.values.reshape(-1, 1))
plt.figure(figsize=(20, 3))
plt.plot(normal_ser_scaled)
plt.show()

print('new ser scaled')
new_ser_scaled = mm_scaler.transform(new_ser.values.reshape(-1, 1))
plt.figure(figsize=(20, 3))
plt.plot(new_ser_scaled)
plt.show()
 

Итак, для set1 как обычной, так и новой серии я получаю вывод ниже.
Set1

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

На приведенных выше рисунках мы можем видеть, что обычные и новые set1 и set2 имеют одинаковые диапазоны. Но масштабированные значения обеих новых серий имеют большую разницу. Один находится в диапазоне -16.0, а другой — в диапазоне -2.5. Почему это происходит? Я понимаю, что может быть какая-то разница, но она может быть не такой большой.

Есть ли другой способ добиться этого?

Комментарии:

1. Похоже на опечатку: Normal min: {normal_ser.max()

2. Установка MinMaxScaler просто означает запоминание минимального и максимального значения ряда. Преобразование MinMaxScaler работает следующим образом: y = (x — min) /(max — min). Диапазоны этих серий даже не пересекаются, поэтому выходные данные получаются разными.

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

4. ДА. Просто попробуйте вычислить это вручную.