🤔 Как выбрать сплит?



Выбор метода разделения (сплита) данных является важным этапом при построении моделей машинного обучения. Правильный выбор сплита позволяет добиться более точных и обобщающих моделей.



🚩Методы



🟠Holdout Method (Метод отложенного набора)

Данные делятся на две части: обучающая выборка (train set) и тестовая выборка (test set). Обычно деление производится в пропорции 70/30 или 80/20. Когда у вас достаточно большой набор данных.Для быстрой оценки производительности модели.

from sklearn.model_selection import train_test_split



# Исходные данные

X = ...

y = ...



# Деление данных на обучающую и тестовую выборки

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




🟠K-Fold Cross-Validation (K-кратная кросс-валидация)

Данные делятся на K частей (фолдов). Модель обучается K раз, каждый раз используя K-1 частей для обучения и одну часть для тестирования. Результаты оцениваются как среднее значение по всем фолдам. Когда нужно уменьшить влияние случайности, особенно при небольшом объеме данных. Для более надежной оценки производительности модели.

from sklearn.model_selection import cross_val_score

from sklearn.ensemble import RandomForestClassifier



# Исходные данные

X = ...

y = ...



# Модель

model = RandomForestClassifier()



# K-кратная кросс-валидация

scores = cross_val_score(model, X, y, cv=5)

print(f"Средняя точность: {scores.mean()}")




🟠Stratified K-Fold Cross-Validation (Стратифицированная K-кратная кросс-валидация)

Подобно K-Fold Cross-Validation, но деление на фолды производится таким образом, чтобы в каждом фолде сохранялись пропорции классов, как в исходных данных. Для задач классификации, особенно при наличии несбалансированных классов.

from sklearn.model_selection import StratifiedKFold

from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import cross_val_score



# Исходные данные

X = ...

y = ...



# Стратифицированная K-кратная кросс-валидация

skf = StratifiedKFold(n_splits=5)

model = RandomForestClassifier()

scores = cross_val_score(model, X, y, cv=skf)

print(f"Средняя точность: {scores.mean()}")




🟠Leave-One-Out Cross-Validation (LOOCV)

Частный случай K-Fold Cross-Validation, где K равно количеству образцов в данных. Каждый раз модель обучается на всех образцах, кроме одного, который используется для тестирования. При очень небольших наборах данных, где важно использовать как можно больше данных для обучения.

from sklearn.model_selection import LeaveOneOut

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import cross_val_score



# Исходные данные

X = ...

y = ...



# LOOCV

loo = LeaveOneOut()

model = LogisticRegression()

scores = cross_val_score(model, X, y, cv=loo)

print(f"Средняя точность: {scores.mean()}")




Ставь 👍 и забирай 📚 Базу знаний