Для того, чтобы разобраться в сложной и объемной теме машинного обучения, попробовать свои силы и отточить навыки, оптимально подходит библиотека scikit-learn (sklearn). Это среда языка Python, она реализует множество различных алгоритмов обучения и стратегий оценки и предоставляет единый интерфейс для их применения.
Один из простейших методов оценки обучающейся системы — наблюдение за ее производительностью по мере предоставления ей все большего числа обучающих примеров. В следующем фрагменте кода для выполнения необходимых вычислений используется функция learning_curve из библиотеки sklearn.
Функция learning_curve возвращает массивы с двумя измерениями, одно из которых соответствует количеству размеров тренировочных наборов, а другое — количеству множеств, используемых для проведения перекрестной проверки. Назовем их (percents, folds). В вышеприведенном фрагменте кода используются значения (10, 5). К сожалению, преобразовать содержимое показанной выше таблицы в графики затруднительно. Однако в библиотеке Seaborn есть — или по крайней мере была — вспомогательная функция tsplot, которая может в этом помочь. Данная функция создает несколько наложенных друг на друга графиков, по одному для каждого состояния, и вычисляет центр и диапазон на основе многократных измерений. Функция tsplot предназначена для построения временных рядов. Она ожидает получить данные, включающие три компонента: моменты времени, состояния и повторы. На графике эти три компонента соответствуют оси x, линии, образуемой в результате группировки данных, и областям утолщения этой линии. Группировка позволяет объединить определенные точки данных; поскольку мы рисуем на одном изображении несколько графиков, нам нужно знать, какие данные принадлежат области одного и того же цвета. Повторы соответствуют множеству оценок одного и того же сценария, допускающих некоторые случайные вариации. Повторив этот процесс, вы получите несколько иной результат.
Функция tsplot ожидает получить перечисленные выше компоненты в следующем порядке: (repeats, times, conditions) (повторы, моменты времени, состояния). Взяв результаты функции learning_curve и поместив train_scores и test_scores во внешнее измерение этого массива, мы получим данные, структурированные следующим образом: (train/test condition, percents, folds). Чтобы изменить порядок следования осей данного массива на (folds, percents, conditions) и привести его в соответствие с результатом функции tsplot ((repeats, times, conditions)), мы используем функцию np.transpose.
Этот метод вместе с кодом приводит в своей книге «Машинное обучение с помощью PYTHON для всех» Марк Феннер. Его объемная, но доступная для новичков в Python работа показывает, как с помощью этого языка можно строить, тестировать, оценивать и применять обучающиеся модели. Здесь рассмотрены вопросы от сферы применения моделей до практического использования библиотек NumPy, scikit-learn, skiPy и др. Особенностью книги стала непривычно скромная математика: совсем немного формул и алгебраической терминологии, и явное доминирование кода, что весьма символично, ведь обучающиеся системы как раз должны избавить нас от математических изысканий. Не забывайте, именно за такими моделями стоит будущее программирования, а значит, и человечества.