Полное руководство по оптимизации производительности модели

Перекрестная проверка — популярный метод машинного обучения и статистического анализа, который включает в себя разделение набора данных на подмножества для оценки и проверки производительности модели. Основная цель перекрестной проверки — оценить, насколько хорошо модель обобщает невидимые данные. Он в основном используется для оценки производительности модели машинного обучения.

Зачем нам нужна перекрестная проверка?

Процесс машинного обучения включает следующие этапы:
1. Сбор набора данных
2. Предварительная обработка + EDA + выбор функций
3. Извлечение входных и выходных столбцов
4. Тестирование обучения Разделение
5. Масштабирование
6. Обучение модели
7. Оценка модели/выбора модели
8. Развертывание модели

Давайте разберемся на примере, здесь мы пытаемся выполнить промежуточный этап проверки поезда после завершения предыдущих шагов. Таким образом, мы дали test_size = 0,3, что означает, что вы делите свои данные таким образом, что 70% будут данными обучения, а 30% будут данными тестирования. После того, как вы обучили свою модель этим 70% данных, вы собираетесь использовать оставшиеся 30% данных для проверки точности.

Примечание. Когда мы проводим тестовое разделение поездов, мы выбираем случайным образом; поэтому 70% данных в обучающей выборке выбираются случайным образом. Этот случайный выбор может вызвать недостаток: может быть случай, когда у нас слишком большая дисперсия в тестовых данных, т. Е. Доля классов может быть такой, как один класс пришел девять раз, а один класс пришел только 1 раз. В этом случае процесс оценки будет невозможен.
Теперь, если мы снова изменим параметр random_state, мы увидим, что наша точность изменится.

Мы можем продолжать изменять random_state, и мы будем продолжать получать разную точность. Таким образом, настоящий вопрос заключается в том, на какой из них вы доверитесь, например, какое разделение дает нам лучшие результаты? Вы не можете сказать, какую именно точность дает ваша модель.
Поэтому решением этой проблемы является перекрестная проверка, при которой вы можете выполнить несколько сплит-тестов поезда, а затем найти их средний балл.

Типы перекрестной проверки

1. Пропустить перекрестную проверку (LOOCV)

Предположим, у вас есть 100 записей. Теперь LOOCV говорит, что в эксперименте 1 он возьмет один набор данных в качестве теста, а остальные будут обучаться. Точность будет проверена на этих единичных данных. Затем в эксперименте 2 следующий набор данных будет использоваться для тестирования, а оставшиеся будут использоваться для обучения вашей модели, и вы повторите тот же процесс для следующего.
Вы всегда упускаете один набор данных.

Недостаток:
1. Будет использовано много вычислительной мощности: Поскольку мы берем одну запись из 100 записей, вам придется выполнить много итераций. Таким образом, вам нужно охватить каждый набор данных, после чего вам нужно будет выполнить 100 итераций.
2. Это приведет к низкому смещению: На обучающем наборе данных он будет работать хорошо, но не будет работать на тестовом наборе данных. Точность снизится, а количество ошибок возрастет.
Примечание. В настоящее время этим никто не пользуется. Но все же, я просто хотел выложить это там.

2. K-кратная перекрестная проверка

Здесь вы выбираете значение K. Предположим, у вас есть 1000 записей, и вы выбрали значение K равным 5. Это значение K означает отсутствие экспериментов, которые вы будете проводить. Поскольку мы берем K = 5, мы проведем 4 эксперимента.
Для каждого эксперимента на основе значения K будет решаться, какими будут наши тестовые данные.
1000/5 = 200: это означает, что первые 200 будут вашими тестовыми данными, а остальные 800 будут вашими данными поезда в первом эксперименте, и ваша точность будет записана для того же. Во втором эксперименте следующие 200 записей будут вашими тестовыми данными, а остальные будут вашими тренировочными данными, а затем для них будет записана ваша точность. Это будет продолжаться до тех пор, пока не будут завершены все ваши 5 итераций, и для каждой итерации у вас будет разная точность.

Из всех этих записанных точностей можно увидеть минимальную точность и максимальную точность. Кроме того, вы можете вывести среднее значение вашей точности, и тогда можно будет сказать, что ваша модель дает такую ​​большую среднюю точность после применения K-кратного CV.

Недостаток.
Вы можете не получить правильную точность для своей модели:может быть сценарий, что 200 наборов данных, выбранных в качестве тестовых данных может иметь только один тип класса, и то же самое может произойти с вашим набором данных поезда, поскольку данные распределяются случайным образом, что может вызвать дисбаланс.
Поэтому для решения этой проблемы у нас есть технология стратифицированной перекрестной проверки.

3. Стратифицированная перекрестная проверка

Все этапы стратифицированной перекрестной проверки такие же, как и при перекрестной проверке K-кратности. Ключевое различие заключается в выборе тестовых данных и обучающих данных для каждого эксперимента. Это гарантирует, что количество экземпляров из каждого класса надлежащим образом учитывается как на этапах обучения, так и на этапах тестирования каждого эксперимента. Это гарантирует, что обучающий набор состоит из той же пропорции классов, что и в наборе данных, и то же самое с набором для тестирования. Пропорция здесь соблюдается.
Примечание. Очевидно, что вам нужно исправить проблему дисбаланса на этапе разработки функций, но после этого, если вы получите несбалансированные данные после разделения тестов поезда, вы будете использовать стратифицированную перекрестную проверку. чтобы получить лучшую точность.

knn = KNeighborsClassifier(n_neighbors = 5)
final = cross_val_score(knn, X, y, cv = 10, scoring ='accuracy')
final.mean()

cross_val_score = функция, которую мы используем для стратифицированной перекрестной проверки.
X = входные данные
y = target
cv= Этот параметр будет содержать ваше значение k, которое вы хотите пройти
оценку = укажите здесь любые показатели оценки в соответствии с вашей моделью (это была моя проблема с классификацией, поэтому я использовал точность, но вы можете указать любые показатели в соответствии с вашей моделью)

Таким образом, этот код разделит ваш набор данных на 10 частей. Каждая часть будет обучена на модели knn и даст вашу точность для каждой части. Вы можете рассчитать среднее значение точности, которую вы получили для каждой части.

Аналогичным образом вы можете сделать и для проблемы регрессии.

Чтобы получить список функций оценки, которые вы можете использовать выше:

from sklearn.metrics import Scorers
list(Scorers.keys())

Спасибо за чтение! Если вам понравилась эта статья и вы хотели бы прочитать больше о моей работе, рассмотрите возможность подписаться на меня на Medium. Я с нетерпением жду возможности поделиться с вами чем-то еще в будущем.