Установка данных и преобразование данных в scikit-learn

В scikit-learn все оценки имеют метод fit(), и в зависимости от того, контролируются ли они или не контролируются, у них также есть метод pred predict() или transform().

Я в процессе написания трансформатора для неконтролируемой учебной задачи и задавался вопросом, существует ли правило, в котором можно поставить какую-то логику обучения. Официальная документация не очень помогает в этом отношении:

fit_transform(X, y=None, **fit_params)
Подходите к данным, а затем преобразуйте их.

В этом контексте подразумевается подборка данных и преобразование данных?

Ответ 1

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

Например, вы сопоставляете линейную модель с данными, чтобы получить наклон и перехват. Затем вы используете эти параметры для преобразования (т.е. Карты) новых или существующих значений x в y.

fit_transform просто выполняет оба действия с одними и теми же данными.

Пример scikit: вы подбираете данные для поиска основных компонентов. Затем вы преобразуете свои данные, чтобы увидеть, как они сопоставляются с этими компонентами:

from sklearn.decomposition import PCA

pca = PCA(n_components=2)

X = [[1,2],[2,4],[1,3]]

pca.fit(X)

# This is the model to map data
pca.components_

array([[ 0.47185791,  0.88167459],
       [-0.88167459,  0.47185791]], dtype=float32)

# Now we actually map the data
pca.transform(X)

array([[-1.03896057, -0.17796634],
       [ 1.19624651, -0.11592512],
       [-0.15728599,  0.29389156]])

# Or we can do both "at once"
pca.fit_transform(X)

array([[-1.03896058, -0.1779664 ],
       [ 1.19624662, -0.11592512],
       [-0.15728603,  0.29389152]], dtype=float32)

Ответ 2

Как объясняют другие ответы, fit не нужно ничего делать (кроме как вернуть объект трансформатора). Это так, что все трансформаторы имеют один и тот же интерфейс и прекрасно работают с такими вещами, как конвейеры.
Конечно, некоторым трансформаторам нужен fit метод (думаю, tf-idf, PCA...), который на самом деле что-то делает.
Метод transform должен возвращать преобразованные данные.

fit_transform - метод удобства, который fit_transform операции подгонки и преобразования. Вы можете получить его бесплатно (!), Выведя свой собственный класс трансформатора из TransformerMixin и применив fit и transform.

Надеюсь, это немного прояснит ситуацию.

Ответ 3

В этом случае вызов метода fit ничего не делает. Как вы можете видеть в этом примере, не все трансформаторы должны действительно что-то делать с помощью методов fit или transform. Я предполагаю, что каждый класс в scikit-learn должен реализовывать подгонку, преобразовывать и/или прогнозировать, чтобы он соответствовал остальной части пакета. Но я думаю, что это действительно слишком много.