При оценке различных настроек («гиперпараметров») для оценщиков, таких как параметр C, который должен быть установлен вручную для SVM, все еще существует риск переобучения в тестовом наборе, поскольку параметры можно настраивать до тех пор, пока оценщик не будет работать оптимально. Таким образом, знания о тестовом наборе могут «просочиться» в модель, а метрики оценки больше не сообщают о производительности обобщения. Чтобы решить эту проблему, еще одна часть набора данных может быть представлена в виде так называемого «проверочного набора»: обучение продолжается на обучающем наборе, после чего выполняется оценка на проверочном наборе, и когда эксперимент кажется успешным , окончательную оценку можно выполнить на тестовом наборе.
Однако, разбивая доступные данные на три набора, мы резко сокращаем количество выборок, которые можно использовать для обучения модели, а результаты могут зависеть от конкретного случайного выбора пары наборов (обучение, проверка).
Решением этой проблемы является процедура, называемая перекрестной проверкой (сокращенно CV). Тестовый набор по-прежнему должен храниться для окончательной оценки, но проверочный набор больше не нужен при выполнении CV. В базовом подходе, называемом k-fold CV, обучающая выборка разбивается на k меньших наборов (другие подходы описаны ниже, но в целом следуют тем же принципам). Для каждой из k «складок» выполняется следующая процедура:
Модель обучается с использованием складок в качестве обучающих данных;
полученная модель проверяется на оставшейся части данных (т. Е. Она используется в качестве тестового набора для вычисления показателя производительности, такого как точность).
Мера производительности, о которой сообщает k-кратная перекрестная проверка, представляет собой среднее значение значений, вычисленных в цикле. Этот подход может быть дорогостоящим в вычислительном отношении, но не тратит слишком много данных (как в случае фиксации произвольного набора проверки), что является большим преимуществом в таких задачах, как обратный вывод, когда количество выборок очень мало.
Самый простой способ использовать перекрестную проверку — вызвать вспомогательную функцию cross_val_score для оценщика и набора данных.
В следующем примере показано, как оценить точность линейной машины опорных векторов ядра в наборе данных радужной оболочки путем разделения данных, подгонки модели и вычисления оценки 5 раз подряд (каждый раз с разными разделениями):
(.env) [boris@fedora35server CROSSVL]$ cat crossVal1.py
from sklearn.model_selection import cross_val_score
from sklearn import svm
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import datasets
X, y = datasets.load_iris(return_X_y=True)
clf = svm.SVC(kernel='linear', C=1, random_state=42)
scores = cross_val_score(clf, X, y, cv=5)
print("%0.2f accuracy with a standard deviation of %0.2f" % (scores.mean(), scores.std()))
(.env) [boris@fedora35server CROSSVL]$ python crossVal1.py
0.98 accuracy with a standard deviation of 0.02
Другой пример
(.env) [boris@fedora35server CROSSVL]$ cat crossVal2.py
import pandas as pd
import numpy as np
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.ensemble import RandomForestClassifier
from sklearn import svm
from sklearn.model_selection import cross_val_score
#read csv file
data = pd.read_csv("./Iris.csv")
#Create Dependent and Independent Datasets based on our Dependent #and Independent features
X = data[['SepalLengthCm','SepalWidthCm','PetalLengthCm']]
y= data['Species']
model = svm.SVC()
accuracy = cross_val_score(model, X, y, scoring='accuracy', cv = 10)
print(accuracy)
#get the mean of each fold
print("Accuracy of Model with Cross Validation is:",accuracy.mean() * 100)
(.env) [boris@fedora35server CROSSVL]$ python crossVal2.py
[0.93333333 0.93333333 1. 1. 0.93333333 0.8
0.93333333 0.93333333 1. 1. ]
Accuracy of Model with Cross Validation is: 94.66666666666667
Таким образом, перекрестная проверка — это процедура, используемая для предотвращения переобучения и оценки навыков модели на новых данных.
Существуют общие тактики, которые вы можете использовать для выбора значения k для вашего набора данных.
Существуют часто используемые варианты перекрестной проверки, такие как послойная и повторная, которые доступны в scikit-learn.
References
No comments:
Post a Comment