fit_transform и transform — это два метода, используемые в машинном обучении для предварительной обработки данных.

fit_transform представляет собой комбинацию двух операций:

  1. fit: вычисляет параметры, необходимые для преобразования данных. Например, он может найти среднее значение и стандартное отклонение данных, чтобы нормализовать их.
  2. transform: Применяет преобразование к данным с использованием параметров, рассчитанных на шаге fit.

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

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

Примеры

  1. Нормализация. Допустим, у вас есть набор данных со значениями в диапазоне от 0 до 1000, и вы хотите привести все значения к диапазону от 0 до 1. Вы можете использовать fit_transform в своих обучающих данных для вычисления минимального и максимального значений, а затем преобразовать обучающие данные, чтобы все значения находились в диапазоне от 0 до 1. Затем вы можете использовать метод transform для ваших тестовых данных, чтобы применить ту же нормализацию, гарантируя, что и обучающие, и тестовые данные находятся в одном масштабе.
  2. PCA (анализ основных компонентов): PCA — это метод, используемый для уменьшения размерности. Он находит основные компоненты данных, которые фиксируют наибольшее разнообразие. Метод fit_transform можно использовать для ваших обучающих данных, чтобы найти основные компоненты, а затем применить преобразование, уменьшив количество функций в данных. Затем метод transform можно использовать для ваших тестовых данных, чтобы применить то же преобразование, гарантируя, что тестовые данные имеют то же количество функций, что и обучающие данные.

В обоих этих примерах метод fit_transform используется для обучающих данных для расчета необходимых параметров и применения преобразования, а метод transform используется для тестовых данных для применения того же преобразования, обеспечивая соответствие обучающих и тестовых данных друг друга.

Пример нормализации:

import numpy as np
from sklearn.preprocessing import MinMaxScaler

# Generate training data
train_data = np.array([[100, 200, 300], [400, 500, 600], [700, 800, 900]])

# Generate test data
test_data = np.array([[150, 250, 350], [450, 550, 650]])

# Create the MinMaxScaler object
scaler = MinMaxScaler()

# Fit and transform the training data
train_data_normalized = scaler.fit_transform(train_data)

# Transform the test data
test_data_normalized = scaler.transform(test_data)

Пример PCA:

import numpy as np
from sklearn.decomposition import PCA

# Generate training data
train_data = np.array([[100, 200, 300], [400, 500, 600], [700, 800, 900]])

# Generate test data
test_data = np.array([[150, 250, 350], [450, 550, 650]])

# Create the PCA object
pca = PCA(n_components=2)

# Fit and transform the training data
train_data_reduced = pca.fit_transform(train_data)

# Transform the test data
test_data_reduced = pca.transform(test_data)

почему мы fit_transform обучающие данные и преобразуем только тестовые данные?

Ответ заключается в обеспечении согласованного масштабирования и количества функций.

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

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

Важно не использовать fit_transform для тестовых данных, так как это потребует расчета параметров предварительной обработки на основе тестовых данных, что приведет к необъективной оценке модели. Тестовые данные всегда должны быть независимыми и использоваться исключительно в целях оценки.

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