Экстремальная версия k-кратной перекрестной проверки - для оценки производительности алгоритмов машинного обучения
Это одна из техник, в которых мы реализуем перекрестную проверку KFold, где k равно n, то есть количеству наблюдений в данных. Таким образом, каждая отдельная точка будет использоваться в наборе проверки, мы создадим n моделей для n наблюдений в данных. Каждая точка / образец используется один раз в качестве тестового набора, а остальные данные / образцы образуют обучающий набор.
Когда и зачем использовать перекрестную проверку Leave-One-Out?
- LOOCV дает надежную и объективную оценку производительности модели.
- Он используется, когда у вас ограниченные данные, и вы хотите использовать как можно больше обучающих данных при подборе модели.
- Он обеспечивает наилучшую возможную оценку ошибки для одной новой точки, то есть, когда у вас есть одна новая точка и вы хотите оценить свою ошибку, правильным методом является перекрестная проверка с исключением одного и другого.
- Он используется для оценки производительности алгоритма машинного обучения, особенно когда производительность точной модели критична и важнее, чем затраты на вычисления.
- Что касается точности, LOOCV приводит к большой дисперсии - как средство оценки ошибки теста.
Когда не использовать перекрестную проверку Leave-One-Out?
- LOOCV в вычислительном отношении очень затратный, особенно рекомендуется не использовать его, когда у вас много данных, например, с большим K, может быть, 50 или 75.
Реализация перекрестной проверки с исключением одного -
Реализацию перекрестной проверки с исключением одного-выхода можно выполнить с помощью cross_val_score (), где вам нужно установить параметр cv, равный количеству наблюдений в вашем наборе данных (для этого мы использовали Candy и набор данных жилья).
from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_absolute_error, make_scorer # Create scorer mae_scorer = make_scorer(mean_absolute_error) rf = RandomForestRegressor(n_estimators=15, random_state=121) # Implement LOOCV loocv_scores = cross_val_score(rf, X=X, y=y, cv=85, scoring=mae_scorer) # Print the mean and standard deviation print("Mean of the errors is: %s." % np.mean(loocv_scores)) print("Standard deviation of the errors is: %s." % np.std(loocv_scores))
Вывод -
Mean of the errors is: 9.48 Standard deviation of the errors is: 7.27
Использование Scikit-learn -
Библиотека машинного обучения Python scikit-learn обеспечивает реализацию LOOCV через класс LeaveOneOut с использованием кросс-валидатора Leave-One-Out.
from sklearn.model_selection import LeaveOneOut from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestRegressor from numpy import mean from numpy import std from numpy import absolute from pandas import read_csv # load dataset dataframe = read_csv('path to dataset file', header=None) data = dataframe.values # split into inputs and outputs X, y = data[:, :-1], data[:, -1] print(X.shape, y.shape) # create loocv procedure loocv = LeaveOneOut() # create model rfr = RandomForestRegressor(random_state=121) # evaluate model scores = cross_val_score(rfr, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1)
Продолжайте учиться и писать код;)