Если вы читали о Data Science и / или машинном обучении, вы наверняка встречали статьи и проекты, которые работают с набором данных MNIST. Набор данных включает набор из 70 000 изображений, каждое из которых представляет собой рукописную цифру от 0 до 9. Я также решил использовать тот же набор данных, чтобы понять, как тонкая настройка параметров модели машинного обучения может изменить ситуацию.
В этой статье объясняется, как я использовал GridSearchCV
, чтобы найти наиболее подходящие параметры для этого набора данных, и использовал их для повышения точности и улучшения матрицы неточностей. Вы можете найти код в репозитории GitHub ниже:
Импортировать библиотеки и набор данных
Я начинаю с импорта необходимых библиотек. Я использовал данные обучения и тестирования как .csv
отсюда. Каждая строка в наборе данных состоит из метки и значений 784 пикселей для представления изображения 28x28.
Обучающие данные состоят из 60 000 изображений, а набор данных тестирования включает 10 000 изображений.
Когда у меня есть данные, я беру из них функции и ярлыки и сохраняю их в train_X
, train_y
, test_X
и test_y
.
Изучение набора данных
Анализ распределения классов
Как я обсуждал в своих предыдущих статьях, данные для каждого класса должны быть примерно одинакового размера, чтобы обеспечить правильное обучение модели без предвзятости.
Если мы посмотрим на график, есть некоторая разница в подсчете для каждой цифры. Однако разница не так уж велика, и модель все равно сможет хорошо обучаться на данных. Таким образом, можно двигаться дальше.
Просмотр тренировочных изображений
Давайте также посмотрим, как изображения выглядят в реальности. Я случайным образом выбираю 10 изображений из обучающих данных и отображаю их с помощью plt.imshow()
.
На 10 случайных изображениях мы сразу видим разницу между цифрами любого одного типа. Взгляните на все 4
на 10 изображениях выше. Первый - жирный и прямой, второй - жирный и диагональный, а третий - тонкий и диагональный. Было бы действительно замечательно, если бы модель могла учиться на данных и действительно обнаруживать все разные стили для 4
.
Применение машинного обучения
Я решил использовать классификатор случайного леса для обучения на обучающих данных и прогнозирования на основе тестовых данных. Я использовал значения по умолчанию для всех параметров.
Затем, используя прогноз, я вычислил матрицу точности и неточности.
Модель достигла точности 94,4%. Матрица неточностей показывает, что модель смогла правильно предсказать множество изображений. Затем я решил настроить параметры модели, чтобы попытаться улучшить результат.
Настройка параметров
Чтобы определить лучшую комбинацию значений параметров для модели, я использовал GridSearchCV
. Это метод, предоставляемый библиотекой sklearn
, который позволяет нам определить набор возможных значений, которые мы хотим попробовать для данной модели, и он обучается на данных и определяет наилучшую оценку на основе комбинации значений параметров.
В данном конкретном случае я решил выбрать диапазон значений для нескольких параметров. Количество оценщиков может быть 100 или 200, максимальная глубина может быть 10, 50 или 100, минимальные выборки разделены на 2 или 4, а максимальные характеристики могут быть основаны на sqrt
или log2
.
GridSearchCV
ожидает оценщика, которым в нашем случае является random_forest_classifier
. Мы передаем возможные значения параметров как param_grid
и оставляем для перекрестной проверки значение 5. Установка verbose
как 5 выводит журнал на консоль, а njobs
как -1 заставляет модель использовать все ядра на машине. Затем я подбираю эту сетку и использую ее, чтобы найти лучший оценщик.
Наконец, я использую эту лучшую модель для прогнозирования тестовых данных.
Взглянув на точность выше, мы видим, что точность улучшилась до 97,08% с 94,42% просто за счет изменения параметров модели. Матрица неточностей также показывает, что большее количество изображений было классифицировано правильно.
Машинное обучение - это не просто считывание данных и применение нескольких алгоритмов, пока мы не получим хорошую модель для работы, но и тонкую настройку моделей, чтобы они лучше всего работали с имеющимися данными.
Определение правильных параметров - один из важнейших шагов в принятии решения о том, какой алгоритм использовать и максимально эффективно использовать его на основе данных.
Заключение
В этой статье я обсуждал проект, в котором я повысил точность классификатора случайного леса, просто выбрав наилучшую комбинацию значений параметров с помощью GridSearchCV
. Я использовал набор данных MNIST и повысил точность с 94,42% до 97,08%.
Прочтите больше статей:
Пожалуйста, не стесняйтесь делиться своими идеями и мыслями. Вы также можете связаться со мной в LinkedIn.