Метод оценки модели машинного обучения от вступления до реального боя [2]

машинное обучение искусственный интеллект

Это пятый день моего участия в ноябрьском испытании обновлений, подробности о мероприятии:Вызов последнего обновления 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 Методы разделения данных для других особых случаев

  1. Для секретных данных их цели могут быть распределены неравномерно.Например, в медицинских данных людей с раком гораздо меньше, чем людей без рака.В настоящее время используются методы разделения данных: StratifiedKFold, StratifiedShuffleSplit
  2. Для сгруппированных данных способ их деления другой, основные методы — GroupKFold, LeaveOneGroupOut, LeavePGroupOut, GroupShuffleSplit
  3. Для данных, связанных со временем, используются методы TimeSeriesSplit.