- Перекрестная проверка — это статистический метод, используемый для оценки навыков моделей машинного обучения.
- В машинном обучении мы создаем модели для прогнозирования исхода определенных событий.
- Чтобы измерить, достаточно ли хороша модель, мы можем использовать метод Train/Test.
- Train/Test — это метод измерения точности вашей модели.
- Мы разделяем набор данных на два набора: обучающий и тестовый набор.
- Но мы просто не можем предположить, что он будет хорошо работать с данными, которых он раньше не видел. Мы не можем быть уверены, что модель даст предсказание желаемой точности. Нам нужна какая-то гарантия для предсказаний, которые мы получили от модели.
- Проверка нашей модели очень важна.
- Чтобы оценить производительность любой модели машинного обучения, ее необходимо протестировать на невидимых данных. Мы можем определить, является ли наша модель недостаточной, чрезмерной или хорошо обобщенной, основываясь на ее эффективности на невидимых данных.
ПЕРЕКРЕСТНАЯ ПРОВЕРКА (CV) — это один из методов, используемых для проверки эффективности моделей машинного обучения.
Перетасуйте набор данных, чтобы удалить любой порядок.
Разделите данные на Kколичество сгибов. K = 5 или 10 будет работать в большинстве случаев.
Теперь оставьте одну складку для тестирования, а оставшиеся складки — для обучения.
Тренируйте (подгоняйте) модель на тренировке. установите и протестируйте (оцените) его на тестовом наборе и запишите результаты для этого разделения.
Теперь повторите этот процесс для всех сгибов, каждый раз выбирая отдельный сгиб в качестве тестовых данных.
Таким образом, для каждой итерации наша модель обучается и тестируется на разных наборах данных.
В конце суммируйте баллы по каждому разделению и получите средний балл.
K-кратная перекрестная проверка.
В случае перекрестной проверки K Fold входные данные делятся на «K» раз, отсюда и название K Fold.
Эта техника очень хороша, потому что мы даем нашей модели множество образцов.
Для каждой итерации мы будем использовать одну складку в качестве тестовых данных, а остальные — в качестве обучающих данных. Обратите внимание, что для каждой итерации данные в обучении и тестировании меняются, что повышает эффективность этого метода.
Это значительно снижает недообучение, поскольку мы используем большую часть данных для обучения (подгонки), а также значительно снижает переоснащение, поскольку большая часть данных также используется в наборе проверки. Перекрестная проверка K Fold помогает обобщить модель машинного обучения, что приводит к более точным прогнозам на неизвестных данных.
Стратифицированная перекрестная проверка K-кратности
Стратифицированная K-кратность используется, когда простого случайного перетасовки и разделения данных недостаточно, и мы хотим иметь правильное распределение данных в каждой кратности. В случае регрессии проблемные складки выбираются таким образом, чтобы среднее значение ответа было примерно одинаковым во всех сгибах. В случае классификации складки выбираются так, чтобы иметь одинаковую пропорцию меток класса. Стратифицированная K-складка более полезна в случае проблем классификации, когда очень важно иметь одинаковый процент этикеток в каждой сгибе.
Код:
Импорт библиотек
from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier import numpy as np from sklearn.datasets import load_digits digits= load_digits()
Сначала мы строим модели без использования метода перекрестной проверки K Fold и отмечаем точность на test_data.
Разделить данные
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(digits.data,digits.target,test_size=0.3)
Функция для получения оценки с различными моделями:
def get_score(model, X_train, X_test, y_train, y_test): model.fit(X_train, y_train) return model.score(X_test,y_test)
- Логистическая регрессия
- SVM
- Случайный лес
БЕЗ ИСПОЛЬЗОВАНИЯ СКЛАДОК
# For Logistic Regression print(f”Score for Logistic Regression is :{ get_score(LogisticRegression(solver=’liblinear’,multi_class=’ovr’),X_train, X_test, y_train, y_test)}”) # For SVM print(f”Score for SVM is:{ get_score(SVC(gamma=’auto’),X_train, X_test, y_train, y_test)}”) # For Random Forest print(f”Score for Random Forest is:{ get_score(RandomForestClassifier(n_estimators=40),X_train, X_test, y_train, y_test)}”)
Вывод:
Если мы повторно выполняем модели, мы каждый раз получаем разные оценки.
С ИСПОЛЬЗОВАНИЕМ СКЛАДОК
Мы используем стратифицированную кросс-валидацию K Fold
Выход:
У sklearn есть API для стратифицированной перекрестной проверки K Fold
cross_val_score имеет ту же функциональность, что и приведенный выше код:
Код :
Выход:
Используя эту технику, мы можем повысить производительность модели.
Проверьте мои другие блоги
Спасибо за прочтение статьи.
Свяжитесь со мной в Twitter.