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

Эта статья является частью большой серии, посвященной набору данных HAM10000 — пожалуйста, обратитесь к вводной статье. Рекомендуется прочитать предыдущие статьи серии Логистическая регрессия на HAM10000 и Классификация KNN на HAM10000, так как предполагается, что читатель имеет представление о контексте этих статей.

Мотивация

В двух предыдущих статьях Логистическая регрессия на HAM10000 и Классификация KNN на HAM10000 мы построили модели логистической регрессии и классификации K-ближайших соседей (KNN) с использованием библиотеки scikit-learn. Код в двух статьях был очень похож — разделы загрузки данных и подготовки были идентичными, а раздел моделирования отличался только тем, какая модель была создана, в остальном обучение, тестирование и оценка были очень похожи.

Это не случайно. Библиотека scikit-learn была разработана с учетом простоты, удобства использования и гибкости. Очень просто настроить свои модели с помощью параметров и попробовать различные алгоритмы модели с минимальными изменениями. API был разработан таким образом, что различные модели имеют единый формат для обработки данных и вывода прогнозов — более того, многие модели имеют схожие параметры и методы (например, многие модели в scikit-learn имеют метод .fit, .predict и .score).

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

Шаблоны нашей логистической регрессии

В этом разделе мы будем использовать наш код логистической регрессии для создания начального шаблона для реализации моделей scikit-learn. Он имеет надлежащую загрузку и подготовку данных (например, выравнивание изображения, числовые метки и разделение обучения и теста) — это редко меняется, поскольку большинство моделей классификации scikit-learn ожидают данные в этом формате. Кроме того, компоненты обучения и оценки носят очень общий характер, поскольку расчет общей точности и матрицы путаницы применим ко многим моделям scikit-learn. (Причина, по которой код KNN не используется, заключается в том, что в конце у него есть пользовательские функции для настройки гиперпараметров k и построения графика значений k, которые в основном применимы для KNN).

Ниже приведен обобщенный код логистической регрессии (примечание: он предназначен для среды Google Colab и может не работать на локальном компьютере):

В приведенном выше коде есть только четыре строки, которые необходимо обновить, чтобы поэкспериментировать с новой моделью (они разделены комментариями # # # # # CHANGE # # # # # ниже и выше):

  • Строка 23: импортирует модель в ваш код; вы обновите это, импортировав новую модель (например, если я хочу использовать дерево решений, я заменю эту строку на from sklearn.tree import DecisionTreeClassifier)
  • Строка 141: создает экземпляр модели; вы бы подставили в своей модели (например, если бы я использовал дерево решений, я бы заменил эту строку на model = DecisionTreeClassifier(random_state=0))
  • Строка 160: обновите заголовок графика матрицы путаницы (например, если я использую дерево решений, я бы обновил заголовок на Confusion Matrix: Decision Tree).
  • Строка 168: обновите имя файла, в котором будет сохранен график матрицы путаницы (например, если я использую дерево решений, я бы обновил имя на Decision_Tree_CM).

Обратите внимание, что из четырех строк кода, которые нужно изменить, последние две просто называют ваш график/файлы. Таким образом, изменив 2 строки кода, мы можем успешно настроить эксперимент с новой моделью через библиотеку scikit-learn, используя этот шаблон.

Настройка и автоматизация

Шаблон — это только отправная точка — мы можем расширить наш анализ, добавив пользовательские функции. Вот как был разработан код KNN — он использовал код логистической регрессии в качестве отправной точки, а затем была создана дополнительная функциональность для настройки гиперпараметров k значений. Экспериментируя, мы можем создавать собственные функции для различных моделей, которые мы тестируем.

Более того, мы можем использовать шаблон для автоматизации. Вместо того, чтобы создавать отдельные файлы/эксперименты для каждого варианта модели, мы можем импортировать и создавать экземпляры всех моделей одновременно и использовать циклы для их итерации. Это еще больше ускорит наши циклы экспериментов — нам больше не нужно снова запускать один и тот же конвейер данных, и мы сокращаем наши накладные расходы на управление файлами. Примечание. Может потребоваться дополнительный код для отслеживания результатов (например, дополнительные операторы печати или список для хранения матрицы точности / путаницы ваших экспериментов).

Мы также можем комбинировать настройку и автоматизацию — например, мы можем определить новую метрику для оценки наших моделей, а затем циклически пройти через набор моделей scikit-learn. Конечно, по мере того, как мы расширяем возможности настройки и автоматизации, сложность нашего кода также будет увеличиваться. В будущих статьях мы будем опираться на этот шаблон и создавать индивидуальные автоматизированные решения для нашей программы.

Заключение

В этой статье мы разработали шаблон на основе кода логистической регрессии из Логистической регрессии на HAM10000. Поскольку библиотека scikit-learn стандартизирована для различных моделей, которые она предлагает, мы можем повторно использовать почти весь код во время экспериментов с библиотекой. Шаблон требует изменения кода только в четырех строках, из которых только две связаны с моделированием/экспериментированием. Более того, мы можем добавить в шаблон собственные настройки и автоматизацию для большей эффективности. В будущих статьях мы воспользуемся этим шаблоном, чтобы ускорить настройку эксперимента scikit-learn.