Автор оригинала: Pankaj Kumar.
Разделение набора данных на набор тренировок и тестирования – это важная и основная задача, когда приходит к получению модели обучения машины для обучения. Чтобы определить, является ли наша модель перенапряжена или нет, нам нужно проверить ее на невидимых данных (набор валидации).
Если заданная модель не работает хорошо на установленном наборе проверки, то он будет работать хуже при работе с реальными живыми данными. Это понятие делает перекрестную проверку, вероятно, одним из самых важных концепций машинного обучения, которая обеспечивает устойчивость нашей модели.
Перекрестная проверка – это просто способ, который просто оставляет за собой часть данных из набора данных и использует его для тестирования модели (набор валидации), а остальные данные, отличные от зарезервированного, используется для обучения модели.
В этой статье мы реализуем перекрестную проверку, предусмотренную SCI-KIT. Мы реализуем кросс-подтверждение K-Fold.
Интуиция по перекрестности
Давайте сначала посмотрим, почему мы должны использовать перекрестную проверку Отказ
- Это помогает нам с оценкой модели, наконец, определение качества модели.
- Решающее значение для определения, если модель хорошо обобщает данные.
- Чтобы проверить, является ли модель переоборудной или недостаточности.
- Наконец, он позволяет нам выбрать модель, которая имела лучшую производительность.
Существует много типов поперечных методик проверки:
- Оставьте одну перекрестную проверку
- К-раз поперечной проверки
- Стратифицированная к-сложная перекрестная проверка
- Перекрестная проверка серии временных рядов
Реализация кросс-подтверждения K-Fold
Набор данных разделен на «k» Количество подмножеств, подмножества K-1, которые затем используются для обучения модели, и последнее подмножество хранится в качестве проверки, установленного для проверки модели. Затем оценка модели на каждой раке усредняется для оценки производительности модели.
K-Fold Cross Vavelation, используя Scikit
#Importing required libraries from sklearn.datasets import load_breast_cancer import pandas as pd from sklearn.model_selection import KFold from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score #Loading the dataset data = load_breast_cancer(as_frame = True) df = data.frame X = df.iloc[:,:-1] y = df.iloc[:,-1] #Implementing cross validation k = 5 kf = KFold(n_splits=k, random_state=None) model = LogisticRegression(solver= 'liblinear') acc_score = [] for train_index , test_index in kf.split(X): X_train , X_test = X.iloc[train_index,:],X.iloc[test_index,:] y_train , y_test = y[train_index] , y[test_index] model.fit(X_train,y_train) pred_values = model.predict(X_test) acc = accuracy_score(pred_values , y_test) acc_score.append(acc) avg_acc_score = sum(acc_score)/k print('accuracy of each fold - {}'.format(acc_score)) print('Avg accuracy : {}'.format(avg_acc_score))
accuracy of each fold - [0.9122807017543859, 0.9473684210526315, 0.9736842105263158, 0.9736842105263158, 0.9557522123893806] Avg accuracy : 0.952553951249806
В коде выше мы реализовали 5-кратную перекрестную проверку.
Модуль Sklearn.model_selection предоставляет нам класс Kfld, который облегчает реализацию кросс-проверки. Клыко
Класс имеет Сплит
Метод, который требует набора данных для выполнения перекрестной проверки в качестве входного аргумента.
Мы выполнили бинарную классификацию, используя логистическую регрессию, так как наша модель и перекрестная проверка его, используя 5-кратную перекрестную проверку. Средняя точность нашей модели составила примерно 95,25%
Не стесняйтесь проверить Sklearn Kfold Documentation здесь Отказ
Перекрестная проверка с использованием Cross_Val_Score ()
Вы можете сократить вышеуказанный код, используя cross_val_score
Метод класса от Sklearn.model_selection
модуль.
from sklearn.datasets import load_breast_cancer import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.model_selection import cross_val_score from sklearn.model_selection import KFold data = load_breast_cancer(as_frame = True) df = data.frame X = df.iloc[:,:-1] y = df.iloc[:,-1] k = 5 kf = model_selection.KFold(n_splits=k, random_state=None) model = LogisticRegression(solver= 'liblinear') result = cross_val_score(model , X, y, cv = kf) print("Avg accuracy: {}".format(result.mean()))
Avg accuracy: 0.952553951249806
Результаты обоих кодов одинаковы.
cross_val_score
Класс требует модели, набора набора, этикеток и метод перекрестного варианта в качестве аргумента ввода. Вы можете узнать больше о его функциональности и методах здесь Отказ
Я надеюсь, что до сих пор вы, возможно, получили идею о перекрестной проверке.
Важное практическое значение использования кросс-подтверждения означает, что нам потребуется больше вычислительных ресурсов, поскольку модель обучается и проверена на разных складках данных, K количество раз.
Заключение
В этой статье мы пытались получить некоторую интуицию за перекрестной проверкой и ее работой. Мы реализовали наиболее часто используемую кросс-проверку K-Fold, используя Sklearn.
Счастливое обучение!