Разница тут скорее принципиальная. Мы имеем в руках учебный датасет "целиком", но пытаемся смоделировать реальную ситуацию, когда мы имеем какие-то данные, на основе которых нам надо построить систему принятия решений, которая затем должна хорошо работать на новых, ранее не виданных данных. Я говорю "система", а не "модель", потому что модель обычно является частью более крупного пайплайна, включающего в себя также как минимум пред- и постобработку данных.
Даже в данном примере наша итоговая система обработки данных состоит не только из модели, но также и из скейлера, который, как и модель, имеет настраиваемые параметры (если хотите, их можно даже назвать обучаемыми; неспроста скейлеры имеют интерфейс .fit, как и модели). В случае StandardScaler настраиваемыми параметрами являются выборочные оценки матожидания и стандартного отклонения для каждого признака в датасете. Эти обучаемые параметры, как и параметры следующей за скейлером модели, должны подбираться ("обучаться") только на обучающих данных, чтобы не допустить утечки информации из тестовых данных. То есть по-хорошему, никакие настраиваемые параметры системы не должны подстраиваться на тестовых данных - только так мы сможем доверять итоговым оценкам качества решения на отложенной выборке и не компрометировать их.
Хорошая статья для первого знакомства с темой. Но оценивать статистики для масштабирования признаков (вызывать fit или fit_transform у Sclaler-а) следует после сплита и только на обучающих данных, а на тестовых только применять преобразование (вызывать transform) с оцененными параметрами:
Да, LabelEncoder для целевой переменной можно вызывать и до разделения, так как он не оценивает никакие статистики по данным, поставил его вызов после сплита исключительно для единообразия обращения со всем, у чего есть интерфейс (fit, transform).
Разница тут скорее принципиальная. Мы имеем в руках учебный датасет "целиком", но пытаемся смоделировать реальную ситуацию, когда мы имеем какие-то данные, на основе которых нам надо построить систему принятия решений, которая затем должна хорошо работать на новых, ранее не виданных данных. Я говорю "система", а не "модель", потому что модель обычно является частью более крупного пайплайна, включающего в себя также как минимум пред- и постобработку данных.
Даже в данном примере наша итоговая система обработки данных состоит не только из модели, но также и из скейлера, который, как и модель, имеет настраиваемые параметры (если хотите, их можно даже назвать обучаемыми; неспроста скейлеры имеют интерфейс
.fit
, как и модели). В случае StandardScaler настраиваемыми параметрами являются выборочные оценки матожидания и стандартного отклонения для каждого признака в датасете. Эти обучаемые параметры, как и параметры следующей за скейлером модели, должны подбираться ("обучаться") только на обучающих данных, чтобы не допустить утечки информации из тестовых данных. То есть по-хорошему, никакие настраиваемые параметры системы не должны подстраиваться на тестовых данных - только так мы сможем доверять итоговым оценкам качества решения на отложенной выборке и не компрометировать их.Хорошая статья для первого знакомства с темой. Но оценивать статистики для масштабирования признаков (вызывать fit или fit_transform у Sclaler-а) следует после сплита и только на обучающих данных, а на тестовых только применять преобразование (вызывать transform) с оцененными параметрами:
Да, LabelEncoder для целевой переменной можно вызывать и до разделения, так как он не оценивает никакие статистики по данным, поставил его вызов после сплита исключительно для единообразия обращения со всем, у чего есть интерфейс (fit, transform).