В этой статье мы рассмотрим обобщение нашего рабочего процесса классификации с помощью библиотеки 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.