Модели глубокого обучения в Керасе - Исследовательский анализ данных (EDA)

Введение Глубокое обучение - одна из самых интересных и многообещающих областей искусственного интеллекта (ИИ) и машинного обучения в настоящее время. Благодаря значительным достижениям в области технологий и алгоритмов в последние годы глубокое обучение открыло дверь в новую эру приложений искусственного интеллекта. Во многих из этих приложений алгоритмы глубокого обучения работают наравне с экспертами-людьми, а иногда и превосходят их [https://techcrunch.com/2017/05/24/alphago-beats-planets-best-human-go-player-ke-jie / amp /]. Python имеет b

Вступление

Глубокое обучение - одна из самых интересных и перспективных областей искусственного интеллекта (ИИ) и машинного обучения в настоящее время. Благодаря значительным достижениям в области технологий и алгоритмов в последние годы глубокое обучение открыло дверь в новую эру приложений искусственного интеллекта.

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

Python стал идти к языку для машинного обучения и многие из наиболее популярных и мощных глубоких библиотек обучения и структур , такие как TensorFlow , Keras и PyTorch встроены в Python.

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

Почему Керас?

Keras - это API глубокого обучения, построенный на основе TensorFlow. TensorFlow - это комплексная платформа машинного обучения, которая позволяет разработчикам создавать и развертывать модели машинного обучения. TensorFlow был разработан и используется Google; хотя он был выпущен под лицензией с открытым исходным кодом в 2015 году.

Keras предоставляет высокоуровневый API для TensorFlow. Это позволяет очень легко создавать различные типы моделей машинного обучения, используя преимущества инфраструктуры и масштабируемости TensorFlow.

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

Керас очень мощный; это наиболее часто используемый инструмент машинного обучения ведущими чемпионами Kaggle в различных соревнованиях, проводимых на Kaggle.

Прогноз цен на жилье с глубоким обучением

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

В первой статье этой серии мы импортируем пакеты и данные и проведем некоторый исследовательский анализ данных (EDA), чтобы познакомиться с набором данных, с которым мы работаем.

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

На этом предварительном этапе мы импортируем пакеты, необходимые на следующих этапах:

 import tensorflow as tf 
 from tensorflow import keras 
 from tensorflow.keras import layers 
 import pandas as pd 
 import numpy as np 
 import matplotlib.pyplot as plt 
 import seaborn as sns 

Мы импортируем tensorflow который включает в себя Keras и некоторые другие полезные инструменты. Для краткости кода мы импортируем keras и layers отдельно, поэтому вместо tf.keras.layers.Dense мы можем писать layers.Dense .

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

И для визуализации и изучения данных, мы импортируем plt из matplotlib пакета и seaborn . Matplotlib - это фундаментальная библиотека для визуализации, а Seaborn значительно упрощает работу с ней.

Загрузка данных

В этом руководстве мы будем работать с набором данных, который сообщает о продажах жилых единиц в период с 2006 по 2010 год в городе Эймс, который находится в штате Айова, США.

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

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

Вы можете узнать больше о наборе данных на этой странице в Kaggle .

Чтобы загрузить точный файл набора данных, который мы будем использовать в этом руководстве, посетите его страницу Kaggle и нажмите кнопку загрузки. Будет загружен файл CSV, содержащий данные.

Мы переименуем этот файл в AmesHousing.csv и загрузим его в нашу программу с помощью функции read_csv()

 df = pd.read_csv('AmesHousing.csv') 

Загруженный набор данных содержит 2930 строк (записей) и 82 столбца (характеристики). Вот усеченное изображение всего нескольких строк и столбцов:


  Заказ   PID         Подкласс MS   Зонирование MS   Lot Frontage   Площадь участка   улица

0 1 526301100 20 RL 141 31770 Проложить 1 2 526350040 20 RH 80 11622 Проложить 2 3 526351010 20 RL 81 год 14267 Проложить


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

Прежде чем продолжить, мы удалим некоторые функции (столбцы) из набора данных, поскольку они не предоставляют никакой полезной информации для режима. Это функции Order и PID :

 df.drop(['Order', 'PID'], axis=1, inplace=True) 

Исследовательский анализ данных (EDA)

Исследовательский анализ данных (EDA) помогает нам лучше понимать данные и выявлять в них закономерности. Самая важная переменная для изучения в данных - целевая переменная: SalePrice .

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

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

Распределение продажной цены

Во-первых, давайте посмотрим на распределение SalePrice . Гистограммы

  • отличный и простой способ взглянуть на распределения переменных. Давайте воспользуемся Matplotlib для построения гистограммы, которая отображает распределение SalePrice :

    fig, ax = plt.subplots(figsize=(14,8)) sns.distplot(df[‘SalePrice’], kde=False, ax=ax)

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

гистограмма продажнойцены{.ezlazyload}

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

 fig, ax = plt.subplots(figsize=(14,8)) 
 sns.swarmplot(df['SalePrice'], color='#2f4b7c', alpha=0.8, ax=ax) 

Это приведет к:

цена продажи ройучасток{.ezlazyload}

Глядя на гистограмму и график роя выше, мы видим, что для большинства единиц цена продажи колеблется от 100 000 до 200 000 долларов. Если мы сгенерируем описание SalePrice с помощью функции Pandas describe() :

 print(df['SalePrice'].describe().apply(lambda x: '{:,.1f}'.format(x))) 

Мы получим:

 count 2,930.0 
 mean 180,796.1 
 std 79,886.7 
 min 12,789.0 
 25% 129,500.0 
 50% 160,000.0 
 75% 213,500.0 
 max 755,000.0 
 Name: SalePrice, dtype: object 

Отсюда мы знаем, что:

  • Средняя цена продажи - 180 796 долларов.
  • Минимальная цена продажи составляет 12 789 долларов США.
  • Максимальная цена продажи составляет 755 000 долларов США.

Корреляция с продажной ценой

Теперь давайте посмотрим, как переменные-предикторы в наших данных соотносятся с целевой SalePrice . Мы рассчитаем эти значения корреляции с помощью метода Пирсона, а затем визуализируем корреляции с помощью тепловой карты :

 fig, ax = plt.subplots(figsize=(10,14)) 
 saleprice_corr = df.corr()[['SalePrice']].sort_values( 
 by='SalePrice', ascending=False) 
 sns.heatmap(saleprice_corr, annot=True, ax=ax) 

А вот тепловая карта, которая показывает, как переменные-предикторы коррелируют с SalePrice .

Более светлые цвета на карте указывают на более высокие значения положительной корреляции, а более темные цвета обозначают более низкие значения положительной корреляции, а иногда и отрицательные значения корреляции:

тепловая картакорреляции{.ezlazyload}

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

Например, мы можем видеть , что SalePrice сильно коррелирует с Overall Qual переменной , которая описывает общее качество материалов и отделки дома. Мы также можем видеть высокую корреляцию с Gr Liv Area которая определяет надземную жилую площадь квартиры.

Изучение различных степеней корреляции

Теперь, когда у нас есть некоторые переменные, которые сильно коррелируют с SalePrice , давайте рассмотрим корреляции более глубоко.

Некоторые переменные сильно коррелированы с SalePrice , а некоторые нет. Проверяя их, мы можем сделать выводы о том, что является приоритетным при покупке недвижимости.

Высокая корреляция

Во-первых, давайте рассмотрим две переменные, которые имеют высокую положительную корреляцию с SalePrice а именно: Overall Qual которое имеет значение корреляции 0.8 и Gr Liv Area имеющее значение корреляции 0.71 .

Overall Qual качество представляет собой общее качество материалов и отделки дома. Давайте исследуем их отношения дальше, построив график рассеяния с помощью Matplotlib:

 fig, ax = plt.subplots(figsize=(14,8)) 
 ax.scatter(x=df['Overall Qual'], y=df['SalePrice'], color="#388e3c", 
 edgecolors="#000000", linewidths=0.1, alpha=0.7); 
 plt.show() 

Вот итоговый график рассеяния:

график рассеяния с высокойкорреляцией{.ezlazyload}

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

Теперь давайте посмотрим, как Gr Liv Area и SalePrice соотносятся друг с другом с помощью другого графика разброса:

 fig, ax = plt.subplots(figsize=(14,8)) 
 ax.scatter(x=df['Gr Liv Area'], y=df['SalePrice'], color="#388e3c", 
 edgecolors="#000000", linewidths=0.1, alpha=0.7); 
 plt.show() 

Вот итоговый график рассеяния:

график рассеяния с высокойкорреляцией{.ezlazyload}

Опять же, мы можем ясно видеть высокую положительную корреляцию между Gr Liv Area и SalePrice на этом графике разброса. Они имеют тенденцию увеличиваться друг с другом, с некоторыми отклонениями.

Умеренная корреляция

Затем давайте посмотрим на переменные, которые имеют умеренную положительную корреляцию с SalePrice . Мы рассмотрим Lot Frontage который имеет значение корреляции 0.36 и Full Bath которое имеет значение корреляции 0.55 .

Lot Frontage представляет собой длину участка перед домом, вплоть до улицы. А Full Bath представляет собой количество полностью оборудованных ванных комнат над землей.

Подобно тому, что мы сделали с Overall Qual и Gr Liv Area , мы построим две диаграммы разброса, чтобы визуализировать отношения между этими переменными и SalePrice .

Начнем с Lot Frontage :

 fig, ax = plt.subplots(figsize=(14,8)) 
 ax.scatter(x=df['Lot Frontage'], y=df['SalePrice'], color="orange", 
 edgecolors="#000000", linewidths=0.5, alpha=0.5); 
 plt.show() 

график рассеяния с умереннойкорреляцией{.ezlazyload}

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

Затем давайте покажем диаграмму рассеяния для Full Bath :

 fig, ax = plt.subplots(figsize=(14,8)) 
 ax.scatter(x=df['Full Bath'], y=df['SalePrice'], color="orange", 
 edgecolors="#000000", linewidths=0.5, alpha=0.5); 
 plt.show() 

график разброса с умереннойкорреляцией{.ezlazyload}

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

Низкая корреляция

Наконец, давайте посмотрим на переменные, которые имеют низкую положительную корреляцию с SalePrice и сравним их с тем, что мы видели до сих пор. Мы рассмотрим Yr Sold который имеет значение корреляции -0.031 и Bsmt Unf SF который имеет значение корреляции 0.18 .

Yr Sold представляет год , в котором был продан дом. А Bsmt Unf SF представляет собой недостроенную площадь подвала в квадратных футах.

Начнем с года Yr Sold :

 fig, ax = plt.subplots(figsize=(14,8)) 
 ax.scatter(x=df['Yr Sold'], y=df['SalePrice'], color="#b71c1c", 
 edgecolors="#000000", linewidths=0.1, alpha=0.5); 
 ax.xaxis.set_major_formatter( 
 ticker.FuncFormatter(func=lambda x,y: int(x))) 
 plt.show() 

график рассеяния с низкойкорреляцией{.ezlazyload}

Корреляция здесь настолько слабая, что можно с уверенностью предположить, что корреляции между этими двумя переменными практически нет. Можно с уверенностью предположить, что цены на недвижимость не сильно изменились с 2006 по 2010 год.

Также сделаем сюжет для Bsmt Unf SF :

 fig, ax = plt.subplots(figsize=(14,8)) 
 ax.scatter(x=df['Bsmt Unf SF'], y=df['SalePrice'], color="#b71c1c", 
 edgecolors="#000000", linewidths=0.1, alpha=0.5); 
 plt.show() 

график рассеяния с низкойкорреляцией{.ezlazyload}

Здесь мы видим, что некоторые объекты недвижимости с более низким Bsmt Unf SF продаются по более высокой цене. Опять же, это может быть чистой случайностью, и между ними нет явной корреляции.

Можно с уверенностью предположить, что Bsmt Unf SF не имеет большого отношения к SalePrice .

Заключение

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

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

Наконец, мы выбрали несколько переменных и проверили их корреляцию с основной переменной, на которую мы обращаем внимание - переменной SalePrice

comments powered by Disqus