Я новичок в науке данных , и я не понимаю разницу между fit
и fit_transform
методы в scikit-учиться. Кто-нибудь может просто объяснить, почему нам может понадобиться преобразовать данные?
Что означает подгонка модели к тренировочным данным и преобразование в тестовые данные? Означает ли это, например, преобразование категориальных переменных в числа в поезде и преобразование нового набора функций для проверки данных?
python
scikit-learn
Kaggle
источник
источник
fit
методtraining dataset
и используемtransform
методboth
обучения - набор данных обучения и тестовый набор данныхОтветы:
Чтобы центрировать данные (сделать так, чтобы они имели нулевое среднее значение и единичную стандартную ошибку), вычтите среднее значение, а затем разделите результат на стандартное отклонение.
Вы делаете это на тренировочном наборе данных. Но затем вы должны применить то же преобразование к своему тестовому набору (например, в перекрестной проверке) или к вновь полученным примерам до прогноза. Но вы должны использовать те же два параметра и (значения), которые вы использовали для центрирования обучающего набора.σμ σ
Следовательно, каждое преобразование sklearnμ σ
fit()
просто вычисляет параметры (например, и в случае StandardScaler ) и сохраняет их как состояние внутренних объектов. После этого вы можете вызвать его метод, чтобы применить преобразование к определенному набору примеров.σtransform()
fit_transform()
объединяет эти два шага и используется для начальной подгонки параметров на обучающем множестве , но также возвращает преобразованный . Внутренне он просто вызывает сначала, а затем и те же данные.х ′fit()
transform()
источник
get_params()
coef_
(то есть наклон и точка пересечения), а не возвращаемыеget_params()
(которые вместо этого возвращают набор аргументов конструктора модели с соответствующими значениями).fit_transform()
поскольку это не позволило бы нам получить доступ к состоянию внутренних объектов, чтобы преобразовать последующие примеры с теми же параметрами, которые были получены с использованиемfit()
исходного набора данных? Это происходит, например, когда у вас есть набор тестовых данных, и вы хотите преобразовать набор тестов, чтобы передать его обученному классификатору.t.fit_transform(train_data)
,t
будет установлен, так что вы можете спокойно использоватьt.transform(test_data)
.Следующее объяснение основывается на
fit_transform
изImputer
класса, но идея та же дляfit_transform
других классов scikit_learn нравитсяMinMaxScaler
.transform
заменяет пропущенные значения числом. По умолчанию это число означает количество столбцов некоторых данных, которые вы выбираете. Рассмотрим следующий пример:Теперь импутер научился использовать среднее (1 + 8) / 2 = 4,5 для первого столбца и среднее (2 + 3 + 5,5) / 3 = 3,5 для второго столбца, когда его применяют к данным из двух столбцов:
мы получили
Таким образом,
fit
средство вычисления вычисляет средние значения столбцов по некоторым данным иtransform
применяет эти средства к некоторым данным (которые просто заменяют пропущенные значения средними). Если оба эти данные одинаковы (т. Е. Данные для расчета среднего и данные, к которым применены средние значения), вы можете использовать их, заfit_transform
которыми в основномfit
следует atransform
.Теперь ваши вопросы:
«По различным причинам во многих реальных наборах данных содержатся пропущенные значения, часто кодируемые как пробелы, NaN или другие заполнители. Такие наборы данных, однако, несовместимы с оценками scikit-learn, которые предполагают, что все значения в массиве являются числовыми» ( источник )
fit
Из imputer не имеет ничего общего сfit
используемым в модели фитинга. Таким образом, используя imputer'sfit
для тренировочных данных просто вычисляет средние значения для каждого столбца обучающих данных. Использованиеtransform
данных испытаний затем заменяет пропущенные значения данных испытаний средними значениями, которые были рассчитаны на основе данных обучения.источник
С точки зрения непрофессионала, fit_transform означает выполнить некоторое вычисление, а затем выполнить преобразование (скажем, вычисление среднего значения столбцов по некоторым данным и затем замена пропущенных значений). Так что для тренировочного набора нужно как рассчитать, так и сделать трансформацию.
Но для тестового набора машинное обучение применяет прогнозирование на основе того, что было изучено во время обучающего набора, и поэтому ему не нужно вычислять, он просто выполняет преобразование.
источник
Эти методы используются для преобразования набора данных в scikit-learn:
Давайте возьмем пример для масштабирования значений в наборе данных:
Здесь метод подгонки , применяемый к набору обучающих данных, изучает параметры модели (например, среднее значение и стандартное отклонение). Затем нам нужно применить метод transform к обучающему набору данных, чтобы получить преобразованный (масштабированный) обучающий набор данных. Мы также можем выполнить оба этих шага за один шаг, применив fit_transform к набору данных обучения.
Тогда зачем нам два отдельных метода - подгонка и преобразование ?
На практике нам нужно иметь отдельный набор данных для обучения и тестирования, и здесь помогает отдельный метод подбора и преобразования . Мы применяем подгонку к обучающему набору данных и используем метод преобразования как для обучающего набора, так и для тестового набора данных. Таким образом, обучение, а также тест набор данные трансформируются (масштабирование) , используя параметры модели , которые были усвоены на применение FIT методы учебного набора данных.
Пример кода:
источник
Это не технический ответ, но, надеюсь, полезно построить нашу интуицию:
Во-первых, все оценщики обучаются (или "подгоняются") по некоторым обучающим данным. Эта часть довольно проста.
Во-вторых, все оценки scikit-learn могут использоваться в конвейере, и идея с конвейером состоит в том, что данные передаются через конвейер. После подбора на конкретном уровне в конвейере данные передаются на следующую стадию в конвейере, но очевидно, что данные необходимо каким-то образом изменить (трансформировать); в противном случае вам вообще не понадобится эта стадия в конвейере. Таким образом, преобразование - это способ преобразования данных для удовлетворения потребностей следующего этапа в конвейере.
Если вы не используете конвейер, я все же думаю, что полезно подумать об этих инструментах машинного обучения таким образом, потому что даже самый простой классификатор все еще выполняет функцию классификации. Он принимает в качестве входных данных некоторые данные и производит вывод. Это тоже конвейер; просто очень просто.
Таким образом, fit выполняет обучение, преобразовывает изменения данных в конвейере, чтобы передать их на следующий этап в конвейере, а fit_transform выполняет как фиттинг , так и преобразование в одном, возможно, оптимизированном этапе.
источник
Переходя к другому вопросу, вы сначала строите модель в обучающем наборе, то есть (модель изучает шаблоны или поведение ваших данных из обучающего набора), и когда вы запускаете ту же модель в тестовом наборе, она пытается идентифицировать сходные шаблоны или поведения. как только он определяет, он делает свои выводы и дает результаты, соответственно, данные обучения
источник
Рассмотрим задачу, которая требует от нас нормализации данных. Например, мы можем использовать нормализацию min-max или нормализацию z-счета. В модели есть некоторые присущие ей параметры. Минимальные и максимальные значения нормализации min-max, а также среднее и стандартное отклонение нормализации z-показателя. Функция fit () вычисляет значения этих параметров.
Функция преобразования применяет значения параметров к фактическим данным и выдает нормализованное значение.
Функция fit_transform () выполняет оба шага за один шаг.
Обратите внимание, что одно и то же значение получается независимо от того, выполняем ли мы в 2 этапа или в один этап.
источник
«fit» вычисляет среднее значение и стандартное значение для последующего масштабирования. (только вычисления), вам ничего не дано .
«transform» использует ранее вычисленное среднее и стандартное для автоматического масштабирования данных (вычтите среднее из всех значений, а затем разделите на стандартное).
"fit_transform" делает оба одновременно. Таким образом, вы можете сделать это с 1 строкой кода вместо 2.
Теперь давайте посмотрим на это на практике:
Для обучающего набора X мы делаем «fit_transform», потому что нам нужно вычислить среднее и стандартное, а затем использовать его для автоматического масштабирования данных. Что касается тестового набора X , у нас уже есть среднее и стандартное значение, поэтому мы выполняем только часть преобразования.
Это супер просто. Ты прекрасно справляешься. Продолжайте в том же духе, мой друг :-)
источник