Введение

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

Источник данных
Данные общедоступны через Kaggleотсюда, которую вы можете легко скачать.

О данных
Целью набора данных является прогнозирование класса стекла на основе заданных характеристик. Существует около 9 характеристик (идентификационный номер, RI, Na, Mg, Al, Si, K, Ca, Ba), в котором все столбцы, кроме столбцов Id, играют важную роль в определении типа стекла, которое также является нашей целевой переменной. Существует 7 типов очков в описании набора данных, но в наборе данных у нас нет данных о стекле типа 4, у каждого типа стекла есть свое имя, но в данных целевая переменная пронумерована от 1 до 7. Таким образом, на основе доступных функций мы должны предсказать целевую переменную (тип стекла). стекло).

Давайте начнем !!

Импорт необходимых библиотек

Давайте импортируем необходимые библиотеки, чтобы начать с этой задачей:

Чтение CSV-файла набора данных

Функция Pandas read_csv() импортирует файл CSV (в нашем случае «glass.csv») в формат DataFrame:

Изучение данных

После импорта данных, чтобы узнать больше о наборе данных, мы будем использовать .head() .info() и .describe(). методы.

Метод .head() даст вам первые 5 строк набора данных. Вот результат:

Метод .info() даст вам краткий обзор DataFrame. Этот метод будет печатать информацию о DataFrame, включая тип индекса и столбца, ненулевые значения и использование памяти. Вот результат:

Сводка данных — это одна из полезных операций для фреймов данных, которая дает нам количество, среднее значение, стандартное отклонение вместе с сводкой из 5 чисел об особенностях данных.
Сводка из 5 чисел содержит:

  1. Мин.
  2. Q1
  3. медиана
  4. Q3
  5. Максимум

поэтому функция describe возвращает сводку из 5 чисел вместе с другими статистическими методами, такими как стандартное отклонение, подсчет и среднее

Вот результат:

Нулевая проверка

В наборе данных нет нулевого значения.

Вот результат:

Дубликат чека

Давайте проверим повторяющиеся значения:

Вот результат:

Удаление дубликата

Есть несколько способов справиться с повторяющимися записями, но мы приняли подход, сохраняя последние строки и удаляя строки, которые появились первыми в наборе данных.

Парный сюжет

Парная диаграмма показывает попарные отношения между объектами. Каждая из функций строится по сетке осей, поэтому каждая функция строится как по строкам, так и по столбцам.

Распределение классов

Распределение набора данных типа стекла, показывающее распределение каждого типа стекла в наборе данных и то, сколько раз конкретное стекло встречается в наборе данных. Распределение показывает нам, что данные несбалансированы.

Манипуляция данными

Мы разделили функции и целевые переменные, все независимые переменные хранятся в переменной X, а зависимая переменная хранится в переменных y. Независимые переменные нормализуются с помощью функции нормализации из Keras.Util API Keras. Нормализация также может быть выполнена с помощью Scikit-Learn API Standard-Scaler, Min-Max-Scaler или Robust-Scaler. Существует множество способов справиться с этим.

Почему нормализация?

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

Балансировка классов

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

Подготовка данных

Мы будем использовать 80% нашего набора данных для обучения и 20% для тестирования. Мы не можем вручную разделить наш набор данных, и нам нужно разделить набор данных случайным образом. Чтобы помочь нам с этой задачей, мы будем использовать библиотеку SciKit с именем train_test_split. Мы будем использовать 80% нашего набора данных для обучения и 20% для тестирования.

X_train : (364, 9)
y_train : (364, 8)
X_test : (92, 9)
y_test : (92, 8)

Построение нейронной сети

Функция Sequential() — это самый простой способ построить модель в Keras. Это позволяет вам строить модель слой за слоем. Каждый слой имеет веса, соответствующие следующему за ним слою. Мы используем функцию add() для добавления слоев в нашу модель.

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

Мы будем использовать выпрямленную функцию активации линейного блока, называемую ReLU, на первых двух слоях и функцию Softmax на выходном слое.

ReLU — это наиболее часто используемая функция активации в моделях глубокого обучения. Функция возвращает 0, если она получает любой отрицательный ввод, но для любого положительного значения x она возвращает это значение обратно. Таким образом, это можно записать как f(x)=max(0,x).

Мы также будем использовать методы Dropout и Пакетная нормализация.

Dropout – это метод, при котором во время обучения игнорируются случайно выбранные нейроны. Они «выпадают» случайным образом. Это означает, что их вклад в активацию нижестоящих нейронов временно удаляется при прямом проходе, и никакие обновления веса не применяются к нейрону при обратном проходе.

Пакетная нормализация — это метод, предназначенный для автоматической стандартизации входных данных для слоя в нейронной сети с глубоким обучением.
e.g. У нас есть четыре функции, имеющие разные единицы измерения. После применения пакетной нормализации они приходят в одинаковых единицах измерения.

Функция softmax используется в качестве функции активации в выходном слое моделей нейронных сетей, которые предсказывают полиномиальное распределение вероятностей.

Давайте построим его:

Скомпилируйте модель

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

Резюме модели

Давайте посмотрим на сводку нашей модели:

Теперь подгоняем модель:

Мы определили нашу модель и скомпилировали ее, готовую к эффективным вычислениям.

...
Epoch 395/400
12/12 [==============================] - 0s 3ms/step - loss: 0.5346 - acc: 0.7445 - val_loss: 0.4566 - val_acc: 0.8043
Epoch 396/400
12/12 [==============================] - 0s 3ms/step - loss: 0.4961 - acc: 0.7720 - val_loss: 0.4520 - val_acc: 0.8043
Epoch 397/400
12/12 [==============================] - 0s 3ms/step - loss: 0.5446 - acc: 0.7418 - val_loss: 0.4637 - val_acc: 0.7717
Epoch 398/400
12/12 [==============================] - 0s 4ms/step - loss: 0.5426 - acc: 0.7555 - val_loss: 0.4137 - val_acc: 0.7935
Epoch 399/400
12/12 [==============================] - 0s 3ms/step - loss: 0.5412 - acc: 0.7555 - val_loss: 0.3958 - val_acc: 0.8370
Epoch 400/400
12/12 [==============================] - 0s 3ms/step - loss: 0.5087 - acc: 0.7912 - val_loss: 0.3846 - val_acc: 0.8478

Графики точности и потерь

Давайте определим функцию для построения графиков:

Построение кривых с использованием функции, определенной выше:

Объект истории содержит всю информацию, собранную во время обучения.

Графики:

Оценка модели

Функция Assessment() вернет список с двумя значениями. Первым будет потеря модели в наборе данных, а вторым будет точность модели в наборе данных.

[0.38464123010635376, 0.8478260636329651]

Матрица путаницы

Давайте посмотрим на матрицу путаницы:

Отчет о классификации

Отчет о классификации дает представление о классе, который модель предсказывает правильно и неправильно.

Отчет :

Делаем прогнозы:

array([6, 1, 5, 2, 3, 7, 5, 1, 6, 1, 2, 5, 1, 6, 6, 1, 5, 5, 7, 2, 2, 2,
       3, 2, 3, 7, 2, 7, 2, 3, 6, 3, 7, 2, 7, 2, 5, 5, 2, 2, 6, 2, 7, 2,
       1, 2, 2, 3, 7, 5, 3, 1, 2, 5, 6, 7, 1, 6, 1, 7, 5, 3, 2, 7, 5, 1,
       7, 6, 5, 7, 5, 6, 1, 6, 7, 7, 3, 6, 7, 2, 6, 5, 6, 1, 3, 7, 7, 2,
       1, 2, 1, 3])

Мы успешно создали нашу модель для классификации стекла с использованием Deep Neural Network.

Реализация проекта на каинвасе здесь.

Фото: Джит Чавла