Введение
В этом проекте мы изучим данные и построим глубокую нейронную сеть, которая будет классифицировать стекло по определенным признакам.
Источник данных
Данные общедоступны через 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 чисел содержит:
- Мин.
- Q1
- медиана
- Q3
- Максимум
поэтому функция 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.
Реализация проекта на каинвасе здесь.
Фото: Джит Чавла