Шаг 19.
Введение в машинное обучение с использованием Python. Введение. Первый пример... . Метрики эффективности: обучающий и тестовый наборы

    На этом шаге мы рассмотрим формирование обучающего и тестового наборов.

    На основе этих данных нам нужно построить модель машинного обучения, которая предскажет сорта ириса для нового набора измерений. Но прежде, чем мы применить нашу модель к новому набору, мы должны убедиться в том, что модель на самом деле работает и ее прогнозам можно доверять.

    К сожалению, для оценки качества модели мы не можем использовать данные, которые были взяты нами для построения модели. Это обусловлено тем, что наша модель просто запомнит весь обучающий набор и поэтому она всегда будет предсказывать правильную метку для любой точки данных в обучающем наборе. Это "запоминание" ничего не говорит нам об обобщающей способности модели (другими словами, мы не знаем, будет ли эта модель так же хорошо работать на новых данных).

    Для оценки эффективности модели, мы предъявляем ей новые размеченные данные (размеченные данные, которые она не видела раньше). Обычно это делается путем разбиения собранных размеченных данных (в данном случае 150 цветов) на две части. Одна часть данных используется для построения нашей модели машинного обучения и называется обучающими данными (training data) или обучающим набором (training set). Остальные данные будут использованы для оценки качества модели, их называют тестовыми данными (test data), тестовым набором (test set) или контрольным набором (hold-out set).

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

    В scikit-learn данные, как правило, обозначаются заглавной X, тогда как метки обозначаются строчной у. Это навеяно стандартной математической формулой f(х)=у, где х является аргументом функции, а у - выводом. В соответствии с некоторыми математическими соглашениями мы используем заглавную X, потому что данные представляют собой двумерный массив (матрицу) и строчную у, потому что целевая переменная - это одномерный массив (вектор).

    Давайте вызовем функцию train_test_split для наших данных и зададим обучающие данные, обучающие метки, тестовые данные, тестовые метки, используя вышеупомянутые буквы:

[In 15]:
from sklearn.model_selection import train_test_split 
X_train, X_test, y_train, y_test = train_test_split(
iris_dataset['data'], iris_dataset['target'], random_state=0)

    Перед разбиением функция train_test_split перемешивает набор данных с помощью генератора псевдослучайных чисел. Если мы просто возьмем последние 25% наблюдений в качестве тестового набора, все точки данных будет иметь метку 2, поскольку все точки данных отсортированы по меткам (смотрите вывод для iris['target'], показанный на предыдущем шаге). Используя тестовый набор, содержащий только один из трех классов, вы не сможете объективно судить об обобщающей способности модели, таким образом, мы перемешиваем наши данные, чтобы тестовые данные содержали все три класса.

    Чтобы в точности повторно воспроизвести полученный результат, мы воспользуемся генератором псевдослучайных чисел с фиксированным стартовым значением, которое задается с помощью параметра random_state. Это позволит сделать результат воспроизводим, поэтому вышеприведенный программный код будет генерировать один и тот же результат. Мы всегда будем далее задавать random_state при использовании рандомизированных процедур.

    Выводом функции train_test_split являются X_train, X_test, y_train и y_test, которые все являются массивами NumPy. X_train содержит 75% строк набора данных, а X_test содержит оставшиеся 25%:

[In 16]:
print("Форма массива X_train: {}".format(X_train.shape))
print("Форма массива y_train: {}".format(y_train.shape))
Форма массива X_train: (112, 4)
Форма массива y_train: (112,)

[In 17]:
print("Форма массива X_test: {}".format(X_test.shape))
print("Форма массива y_test: {}".format(y_test.shape))
Форма массива X_test: (38, 4)
Форма массива y_test: (38,)

    На следующем шаге мы рассмотрим исследование данных.




Предыдущий шаг Содержание Следующий шаг