Обзор

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

Классификация - действительно важная задача в мире машинного обучения и науки о данных, и мы собираемся попытаться заставить машину сообщать нам, если мы носим 👕 в нашем 🧠 (← голова… нет смайлика с головой 😔) - в любом случае, вернемся к счастливому настроению… 🙂…. Итак, я сказал, что мы попытаемся заставить машину сообщать нам, носим ли мы рубашку в голове или нет. 🤓

Давай займемся этим!

F-MNIST

Вам может быть интересно, что такое F-MNIST, и те, кто не знает, что это, могут делать обоснованное предположение и думать, что мы говорим о каком-то НЛО или о чем-то там, наверху, связанном со страстными историями, от которых у нас мурашки по коже. В любом случае, F-MNIST - это совсем другое.

На странице F-MINST Github, где находится исходный набор данных, мы можем найти, что такое F-MINST на самом деле. Я процитирую его здесь, чтобы вам не пришлось искать его 😇

Fashion-MNIST - это набор изображений статей Zalando, состоящий из обучающего набора из 60 000 примеров и тестового набора из 10 000 примеров. Каждый пример представляет собой изображение в оттенках серого 28x28, связанное с меткой из 10 классов. Мы намерены Fashion-MNIST служить прямой заменой исходного набора данных MNIST для тестирования алгоритмов машинного обучения. Он имеет одинаковый размер изображения и структуру разделов для обучения и тестирования.

Вот пример того, как выглядят данные (каждый класс занимает три строки):

Теперь я думаю, было бы замечательно, если бы вы посетили Github Zalando Research, щелкнув ссылку под изображением или нажав здесь, и вы узнаете об этом больше.

Я также не мог удержаться от получения этой действительно классной анимации из их Github ... Поверьте мне, это не ваша мышь или трекпад или что-то еще, что вы можете использовать для управления своим компьютером, выполняя все эти движения, это просто гифка. 😀

Теперь, когда вы знаете немного больше о F-MNIST, давайте по-настоящему приступим к кодированию!

Незадолго до того, как мы начнем делать некоторые футуристические вещи, я хочу упомянуть, что в наборе данных есть метка для каждой ткани, описанной здесь, в порядке возрастания:

Кодирование 👨‍💻👩‍💻

В названии я упомянул о Scikit-learn и TensorFlow. Мы будем использовать оба подхода и посмотрим, что мы можем сделать, чтобы наша машина была более точной. Помните: мы не хотим, чтобы у нас в голове была рубашка. К сожалению, в наборе данных нет головных уборов, но у нас есть кроссовки, и применимы те же рассуждения: мы не хотим, чтобы в нашей голове была.

Важно отметить, что для обоих подходов мы будем использовать Python 🐍 Давайте, наконец, разберемся с этим!

А) Использование Scikit-learn, также известного как sklearn .

Прежде всего, давайте создадим файл Python с помощью вашего любимого редактора, например Spyder или PyCharm. Начнем с импорта некоторых библиотек.

Теперь пора загрузить тестовые и обучающие данные с помощью панд. Файлы CSV, изначально загруженные с Kaggle, можно найти здесь.

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

Если вы не понимаете, что там происходит, я вас не виню. Если ваше лицо выглядит как любое из следующих 😳 🤨 🤯 🥺, пожалуйста, теперь, когда я просто определил словарь с именем models, и каждая строка, которая выглядит как models["blahblah"] = blehbleh, является просто дополнением к models словарю с использованием ключа blahblah и значения blehbleh, которое является моделью. 😃

Теперь давайте рассмотрим все модели, используя цикл, и посмотрим, кто кого лучше. 💪

Сначала мы проводим перекрестную проверку данных обучения и смотрим, какая оценка будет самой высокой, чтобы мы могли использовать эту модель для сравнения ее с данными теста.

Мы не хотим проверять каждую полученную оценку. Таким образом, мы проверяем результат только в том случае, если он превышает максимальное значение в нашем scores списке. Если это так, то мы продолжаем и делаем прогноз в соответствии с тестовыми данными, исключая идентификатор, создавая CSV-файл результатов, который приводит к некоторым прогнозам.

После долгого ожидания ⏱ (если у вас нет возможностей графического процессора) мы получаем следующие результаты с нашей удивительной красивой таблицей:

БУМ! Ну наконец то! … И ПОБЕДИТЕЛЬ, НАШ ДОРОГОЙ ДРУГ ИЗ АНСАМБЛЯ: GRADIENT BOOSTING CLASSIFIER! *

ВЫПОЛНЕНО! 🎊… воздушный шарик не повредит, так что поехали → 🎈

Теперь мы можем быть уверены, по крайней мере, что наша вероятность носить 👟 в голове снизилась благодаря GBC. 🙏

* The 89.2% reflected is based on the cross-validation. The actual score would be less than that. It would oscillate between the 80s.

Б) Использование TensorFlow… с Keras.

Для этого подхода мы будем использовать Keras, библиотеку нейронной сети, написанную на Python.

Давайте начнем так же, как мы начали раньше. Давайте импортируем несколько важных библиотек!

Если вы следовали первой части, вы уже знаете, почему мы импортируем панды и библиотеку matplotlib. После импорта этих библиотек мы берем кое-что из нашей нейронной сети Keras. EarlyStopping просто остановит тренировочный процесс, когда отслеживаемое количество перестанет улучшаться. Таким образом, у нас будет меньше риска переобучения наших данных. Модель Sequential представляет собой линейный набор слоев, и мы будем складывать несколько слоев. Основные слои, которые мы будем использовать, - это Dense, Dropout, Flatten и Reshape. Кроме того, мы будем использовать 2D сверточный слой, то есть Conv2D, и 2D объединяющий слой, то есть MaxPooling2D. Мы также протестируем некоторые оптимизаторы и посмотрим, какой из них работает лучше всего.

Прежде чем применить все вышеперечисленное, давайте загрузим наши данные. Опять же, данные можно найти здесь. Мы также определим список имен классов и разделим наши обучающие данные на две части.

Теперь давайте соберем все эти слои вместе, используя последовательную модель 😀📚

Теперь давайте скомпилируем нашу модель и выберем оптимизатор.

Теперь, наконец, пришло время обучить наши данные. Мы нормализуем каждый пиксель данных X_train и запускаем процесс подгонки для 7 epochs с 200 выборками на обновление градиента (размер пакета), проверяя 1% данных и имея patience = 2, что означает, что если после 2 эпох, эпоха закончилась. и улучшения не будет, тренировочный процесс будет остановлен. Вам может быть интересно, почему 7 эпох, и ответ на это то, что такое число произвольно, и это то, что мне показалось лучше всего в созданной нами модели.

Теперь, когда модель обучена, мы можем сгенерировать CSV-файл результатов, который дает некоторые прогнозы и готов к тестированию.

Отправляя наши результаты, например, в Kaggle, где на самом деле Y, мы получаем оценку…

… 89,4% !!! 🤯 Мы просто победили GBC !!!

Посмотрим, сможем ли мы его еще немного улучшить. Давай попробуем что-нибудь другое. Давайте сменим оптимизатор.

Очевидно, мы сделали это не просто так, и вы правильно угадали. Результат улучшился !!! Теперь у нас есть два таких → 🤯🤯

90,1% !!! 🤯 Означает ли это - прощай, GBC? Мы любезно отложим GBC в сторону. Попрощайтесь с нашим дорогим другом GBC:

Sorry GBC 😕 but we have to be sure we are not wearing a 👟 in our head and our dear neural network Keras seems to have beaten you today but don’t lose faith 💪😃

… В любом случае, извините за все это. А теперь давайте сделаем несколько прогнозов с X_test, о котором мы не забыли !!!

Теперь мы спросим нашу машину, что такое изображения 6-11 в X_test. Давайте посмотрим, насколько хорошо работает наша машина, и построим график этих результатов.

А теперь пора посмотреть, что в мире мы создали и что наш 🤖 🧠 (роботизированный разум) думает о разных изображениях.

Тадааааа! Эти результаты кажутся впечатляющими, не правда ли? Кажется, наша машина очень уверена в том, что делает. Сможет ли ваш удивительный человеческий разум отнести эту одежду к той же категории? Я бы 🖐

(Optional)

Несмотря на то, что все необязательно, если вы думаете об этом, это необязательно 2x. Если вы решили попробовать эту последнюю часть, добро пожаловать! Давай просто попробуем что-нибудь еще. Обещаю, это последнее. Давайте поищем несколько изображений и посмотрим, что о них думает наша машина. Я протестирую кроссовки и брюки. 👟👖

Этот результат не такой впечатляющий, как другие. Однако я бы сказал, что наше преобразование изображений, возможно, было не лучшим, поэтому я не виню нашу машину. На самом деле есть люди, которые неправильно классифицируют эти сероватые изображения (я один из них 🤓). Таким образом, мы можем сделать еще больше, чтобы наш 🤖 стал еще лучше! 😃

Надеюсь, вам понравился этот «разговор» о моде, одежде, мозгах, роботах и ​​обо всем остальном, о чем, по вашему мнению, мы говорили. Было приятно заняться ML с модой!

Хлопайте, если нужно 👏😇.

I wish you an amazing day — full of robots 🤖🤖🤖