Машинное обучение включает в себя разделение доступных наблюдений на наборы обучающих и тестовых данных, обучение модели на наборе обучающих данных и тестирование ее на наборе тестовых данных.
На рисунке ниже объясняются обычные шаги, связанные с машинным обучением.
Этот подход хорошо работает, если у вас есть много наблюдений, доступных для обучения и тестирования вашей модели, но он показывает слабость, если размер наблюдения невелик.
- Имеющиеся наблюдения должны быть разделены; оставляя меньше данных для обучения алгоритмов и получения оптимальной модели.
- Нет смысла рассчитывать точность обучающих данных, особенно для таких алгоритмов, как деревья решений.
- Тестовые данные имеют ограниченный размер (обычно на тест отводится 20% наблюдений). Вычисленная точность может отличаться для данных, не предназначенных для обучения (например, для данных в реальном времени), и со временем модель может потребовать повторного обучения.
Перекрестная проверка (также известная как K-кратная проверка) в определенной степени решает эти проблемы.
Целью перекрестной проверки является проверка модели несколько раз без уточнения данных, доступных для обучения модели. После обучения алгоритма и оптимизации модели данных данные обучения разбиваются на несколько выборочных наборов данных, и модель проверяется независимо для каждого набора данных. Точность каждого цикла проверки можно усреднить для оценки точности модели в действующей системе.
Обычно перекрестная проверка оценивает ожидаемую точность оптимизированной модели на данных, не предназначенных для обучения, поэтому она обеспечивает лучшую оценку точности модели в реальном приложении.
Преимущество заключается в том, что он получает эту метрику, используя те же обучающие данные, и, в отличие от предыдущего подхода, вам не нужно выделять подмножество данных для ее расчета.
Выполнение
Давайте реализуем K-кратную проверку, используя библиотеку python sklearn cross_val_score.
Вы можете получить исходные данные по ссылке ниже на Kaggle
Прежде всего, давайте импортируем все библиотеки
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import cross_val_score from sklearn.pipeline import Pipeline
Импортируйте данные в Pandas Dataframe
df=pd.read_csv(r’C:\Sanjay\Machine Learning\pima-indians-diabetes-database\diabetes.csv’) df.head()
Вот так выглядят данные
Определите X и y и создайте экземпляр классификатора дерева решений.
y=df[‘Outcome’] X=df.drop([‘Outcome’], axis=1) dec_cls=DecisionTreeClassifier() dec_cls.fit(X,y)
Пришло время выполнить K-кратную проверку, вызвав cross_val_score. Здесь cv=5 указывает, что наблюдения разделены на 5 выборок.
cross_val_score(DecisionTreeClassifier(), X, y, scoring=”accuracy”, cv = 5)
Выход показывает пять индивидуальных точности.
array([0.68181818, 0.68831169, 0.69480519, 0.77777778, 0.7254902 ])
Возьмите среднее значение этих значений, чтобы оценить общую точность реального приложения.
print('Estimated Accuracy {:.3f}'.format(cross_val_score(DecisionTreeClassifier(), X, y, scoring="accuracy", cv = 5).mean()))
Вывод:
Estimated Accuracy 0.716
Ну вот.
Теперь вы знаете, что такое проверка K-Fold в машинном обучении.
Ссылка: