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