Обратное масштабирование разделённых данных

Вопрос или проблема

Я масштабировал исходную матрицу A с помощью sklearn‘s StandardScaler, в результате чего получилась матрица S.

Затем я разделил результат на важную и неважную часть B и C таким образом, что

B + C = S

Теперь я хочу обратным образом масштабировать B и C отдельно.

Однако, когда я пытаюсь использовать обратное масштабирование, результат совершенно неверный. Как мне это сделать?

Хотя я не совсем уверен в вашем приложении и процессе, который вы используете, мне неясно, возможно ли то, что вы описываете (по крайней мере, не с помощью функций библиотеки).

StandardScaler работает, вычитая среднее и деля на стандартное отклонение. Чтобы обратить это, вы умножаете на стандартное отклонение и добавляете среднее ко всем образцам.

Это сработало бы, если бы вы хотели обратить масштабирование S, чтобы вернуться к A, но при разделении возникают некоторые проблемы.

Обратите внимание на следующее уравнение (m – это вектор, s – число):

Если вы хотите найти две матрицы, которые в сумме дадут A, вы умножаете на s (это простая часть), но затем вам нужно как-то вычесть m ОДИН раз из ДВУХ других матриц.

Очевидно, это не так просто, как определить “обратное масштабирование”. Это зависит от того, как S было разделено на B и C изначально. Если, например, B и C были равны, вычитание m/2 из обеих матриц должно сработать. Но при любом другом делении вам нужно будет рассчитать, какой процент этого -m, что S имеет, пошел в каждую из двух других матриц, чтобы правильно обратить это. И если разделение не произошло таким простым образом (например, разные строки матрицы S содержат разные проценты C и B), тогда, откровенно говоря, я не знаю, как это рассчитать или даже возможно ли это сделать.

Я предполагаю, что вы просто вызвали scaler.inverse_transform для B и C и тем самым добавили 2m к правой стороне вышеуказанного уравнения, что привело к неверным результатам.

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

Ответ или решение

Обратное Масштабирование Разделенных Данных: Подходы и Рекомендации

Вопрос, с которым вы столкнулись, касается процессов масштабирования и последующего разделения матрицы данных с использованием StandardScaler из библиотеки sklearn. Результатом этого процесса стала матрица S, которая была разделена на важную (B) и неважную (C) части. Теперь вы хотите выполнить обратное масштабирование для этих частей, однако на практике это привело к некорректным результатам. Давайте разберем этот процесс подробнее и предложим вам стратегию для правильного выполнения задачи.

Понимание Масштабирования и Обратного Масштабирования

Стандартное масштабирование с использованием StandardScaler осуществляется путем вычитания среднего значения и деления на стандартное отклонение для каждой переменной. Обратное масштабирование восстанавливает исходные значения, выполняя обратные операции: умножение на стандартное отклонение и добавление среднего значения. Это выглядит следующим образом:

  • Если S = (A - m) / s, то для обратного масштабирования S мы используем формулу:

    [
    A = S \cdot s + m
    ]

где m — это вектор средних значений, а s — стандартное отклонение.

Проблема Разделения

При разделении матрицы S на две части (B и C) возникает сложность, так как вы фактически изменяете структуру матрицы. Основное уравнение, которое описывает этот процесс, можно записать как:

[
B + C = S
]

При этом для каждого из массивов B и C должно быть выполнено обратное масштабирование. Однако, когда вы пытаетесь применить inverse_transform отдельно к B и C, вы не можете просто применить добавление m ко всем компонентам этих матриц, так как каждая из них использует только часть информации о среднем и стандартном отклонении, использованных для создания S.

Почему Это Проблема?

Если вы напрямую возвращаете B и C обратно в исходное пространство, вы добавите по m для каждой из них:

[
B’ = B \cdot s + m \quad \text{и} \quad C’ = C \cdot s + m
]

Таким образом, общее выражение будет:

[
B’ + C’ = (B + C) \cdot s + 2m = S \cdot s + 2m
]

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

Рекомендации

  1. Преобразование перед Разделением: Чтобы избежать данной ситуации, рекомендуется проводить масштабирование до разделения данных. Вы можете применить StandardScaler к исходной матрице A и только потом разбить результаты на B и C. Это обеспечит корректность дальнейших вычислений и упростит рабочий процесс.

  2. Разделение Учетных Значений: Если по какой-либо причине вам необходимо проводить разделение после масштабирования, потребуется учитывать, как именно вы разделяете данные. Используйте пропорции, чтобы правильно распределить значения, а затем восстановите их, используя соответствующие средние и стандартные отклонения.

  3. Использование Процентов: Если разделение производится по процентному принципу, тип как B = kS и C = (1-k)S, вам нужно умножить соответствующие k на m для выполнения обратного обратного масштабирования с учетом этих процентов.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...