Это пятый день моего участия в ноябрьском испытании обновлений, подробности о мероприятии:Вызов последнего обновления 2021 г.
Разделение набора данных с использованием перекрестной проверки
1 Метод KFold k-кратная перекрестная проверка
Вышеупомянутый метод разделения набора данных на k равных частей называется k-кратной перекрестной проверкой, В третьей части «Оценка модели с использованием перекрестной проверки» мы представимcross_value_scoreметод, параметры методаcvОтвечает за формулировку метода деления набора данных.Если вводится любое целое число k, используется метод KFold.
Реализация sklearn этого метода выглядит следующим образом (но обычно так, как описано в предыдущем разделе вcross_value_scoreметод):
from sklearn.model_selection import KFold
import numpy as np
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
kf = KFold(n_splits=2)
for train_index, test_index in kf.split(X):
print('train_index', train_index, 'test_index', test_index)
train_X, train_y = X[train_index], y[train_index]
test_X, test_y = X[test_index], y[test_index]
Параметр n_splits указывает, на сколько частей вы хотите разделить;
2 RepeatedKFold p раз k-кратная перекрестная проверка
На практике нам недостаточно выполнить k-кратную перекрестную проверку только один раз, нам нужно выполнить несколько раз. Наиболее типичный из них: 10 раз 10-кратной перекрестной проверки Метод RepeatedKFold может контролировать количество перекрестных проверок.
from sklearn.model_selection import RepeatedKFold
import numpy as np
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
kf = RepeatedKFold(n_splits=2, n_repeats=2, random_state=0)
for train_index, test_index in kf.split(X):
print('train_index', train_index, 'test_index', test_index)
Параметр n_repeats — это количество раз, которое вы хотите проверить;
3 Оставьте один вне
Метод исключения по одному — это случай, когда k=n (n — количество выборок в наборе данных) при k-кратной перекрестной проверке, то есть мы оставляем только одну выборку за раз (я сначала понял это как оставляя набор данных, я думал, что так не будет.Это то же самое, что и KFold) для проверки, этот метод подходит только для небольшого количества выборок;
from sklearn.model_selection import LeaveOneOut
X = [1, 2, 3, 4]
loo = LeaveOneOut()
for train_index, test_index in loo.split(X):
print('train_index', train_index, 'test_index', test_index)
4 Выйти
Обратитесь к предыдущему разделу
from sklearn.model_selection import LeavePOut
X = [1, 2, 3, 4]
lpo = LeavePOut(p=2)
for train_index, test_index in lpo.split(X):
print('train_index', train_index, 'test_index', test_index)
5 Случайное распределение ShuffleSplit
Используя метод ShuffleSplit, данные можно случайным образом перемешать, а затем разделить на обучающий набор и тестовый набор. Преимущество также в том, что мы можем воспроизвести наше распределение, используя начальное число random_state, которое, если не указано, будет каждый раз случайным.
Вы можете рассматривать этот метод какРандомизированная версия перекрестной проверки KFold k-fold, илиЗапустите n_split версию метода train_test_split set a side..
import numpy as np
from sklearn.model_selection import ShuffleSplit
X=np.random.randint(1,100,20).reshape(10,2)
rs = ShuffleSplit(n_splits=10, test_size=0.25)
for train , test in rs.split(X):
print(f'train: {train} , test: {test}')
6 Методы разделения данных для других особых случаев
- Для секретных данных их цели могут быть распределены неравномерно.Например, в медицинских данных людей с раком гораздо меньше, чем людей без рака.В настоящее время используются методы разделения данных: StratifiedKFold, StratifiedShuffleSplit
- Для сгруппированных данных способ их деления другой, основные методы — GroupKFold, LeaveOneGroupOut, LeavePGroupOut, GroupShuffleSplit
- Для данных, связанных со временем, используются методы TimeSeriesSplit.