Поиск…


Перекрестная проверка

Изучение параметров функции прогнозирования и тестирование ее на одних и тех же данных является методологической ошибкой: модель, которая только что повторила бы метки образцов, которые она только что увидела, имела бы идеальный результат, но не смогла бы предсказать ничего полезного, невидимые данные. Эта ситуация называется переопределением . Чтобы избежать этого, обычно при проведении (контролируемого) теста машинного обучения удерживать часть доступных данных в качестве тестового набора X_test, y_test . Обратите внимание, что слово «эксперимент» не предназначено для обозначения академического использования, потому что даже в коммерческих условиях машинное обучение обычно начинается экспериментально.

В scikit-learn случайное разделение на тренировки и тестовые наборы можно быстро вычислить с помощью вспомогательной функции train_test_split . Давайте загрузим набор данных диафрагмы, чтобы он соответствовал линейной машине поддержки вектора:

>>> import numpy as np
>>> from sklearn import cross_validation
>>> from sklearn import datasets
>>> from sklearn import svm

>>> iris = datasets.load_iris()
>>> iris.data.shape, iris.target.shape
((150, 4), (150,))

Теперь мы можем быстро опробовать учебный набор, одновременно проведя 40% данных для тестирования (оценки) нашего классификатора:

>>> X_train, X_test, y_train, y_test = cross_validation.train_test_split(
...     iris.data, iris.target, test_size=0.4, random_state=0)

>>> X_train.shape, y_train.shape
((90, 4), (90,))
>>> X_test.shape, y_test.shape
((60, 4), (60,))

Теперь, после того, как у нас есть тренировочные и тестовые наборы, давайте использовать его:

>>> clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
>>> clf.score(X_test, y_test)   

Проверка K-Fold Cross

Кросс-валидация K-fold - это систематический процесс повторения процедуры разделения поездов / испытаний несколько раз, чтобы уменьшить дисперсию, связанную с одним испытанием разделения поездов / испытаний. Вы по существу разделяете весь набор данных на K равными размерами «складки», и каждая сводка используется один раз для тестирования модели и K-1 раз для обучения модели.

В библиотеке scikit имеется несколько методов сгибания. Их использование зависит от характеристик входных данных. Некоторые примеры

K-Fold

Вы по существу разделяете весь набор данных на K равными размерами «складки», и каждая сводка используется один раз для тестирования модели и K-1 раз для обучения модели.

from sklearn.model_selection import KFold
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = KFold(n_splits=3, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1 3] TEST: [2]
TRAIN: [0 1 2] TEST: [3]

StratifiedKFold - это вариация k-fold, которая возвращает слоистые складки: каждый набор содержит примерно одинаковый процент выборок каждого целевого класса в качестве набора

ShuffleSplit

Используется для генерации определенного пользователем количества независимых разделов набора данных поезда / теста. Образцы сначала перетасовываются, а затем разбиваются на пару поездов и испытательных комплектов.

from sklearn.model_selection import ShuffleSplit
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = ShuffleSplit(n_splits=3, test_size=.25, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [3 1 0] TEST: [2]
TRAIN: [2 1 3] TEST: [0]
TRAIN: [0 2 1] TEST: [3]

StratifiedShuffleSplit - это вариация ShuffleSplit, которая возвращает слоистые расщепления, то есть создает разделители, сохраняя одинаковый процент для каждого целевого класса, как в полном наборе.

Другие методы складывания, такие как Leave One / p Out и TimeSeriesSplit (вариация K-fold) доступны в библиотеке scicit model_selection.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow