Pull to refresh

Comments 6

Хорошая статья для первого знакомства с темой. Но оценивать статистики для масштабирования признаков (вызывать fit или fit_transform у Sclaler-а) следует после сплита и только на обучающих данных, а на тестовых только применять преобразование (вызывать transform) с оцененными параметрами:

X_train, X_test,\
    y_train, y_test = train_test_split(X, y,
                                       test_size=0.2)

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

le = LabelEncoder()
y_train = le.fit_transform(y_train)
y_test = le.transform(y_test)

Да, LabelEncoder для целевой переменной можно вызывать и до разделения, так как он не оценивает никакие статистики по данным, поставил его вызов после сплита исключительно для единообразия обращения со всем, у чего есть интерфейс (fit, transform).

Спасибо, что обратили внимание. хоть и не в первый раз такое читаю и вроде знаю про это, но сам пока не могу обратить внимание на такую деталь)))

на самом деле, я брала официальный пример от scikit-learn. возможно, проблема была уже там. надо будет проверить. спасибо, что указали на недочет.

Почему после сплита? Можно и до, разницы ни какой вроде бы нету

Разница тут скорее принципиальная. Мы имеем в руках учебный датасет "целиком", но пытаемся смоделировать реальную ситуацию, когда мы имеем какие-то данные, на основе которых нам надо построить систему принятия решений, которая затем должна хорошо работать на новых, ранее не виданных данных. Я говорю "система", а не "модель", потому что модель обычно является частью более крупного пайплайна, включающего в себя также как минимум пред- и постобработку данных.

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

Sign up to leave a comment.

Articles