Если вы читали о 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.