Добро пожаловать и поздравляем! Вы начали внедрение машинного обучения на реальных наборах данных.

Как и программа print (Hello world), проект прогнозирования цен на жилье может стать первым проектом каждого энтузиаста машинного обучения.

#Введение

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

X = характеристики (размер дома, количество комнат и т. д.)

y = цена дома (670 000 долларов, 780 000 долларов США и т. д.) [k = 1000]

Здесь вы видите, что цены указаны в числовой форме, и это может быть что угодно, например, 570 тысяч, 870,5 тысяч или 112,7 тысяч. Поэтому первой целью инженера по машинному обучению должен быть поиск подхода к решению этой проблемы.

Определенно, вы получаете что-то в качестве результата (y или цены), поэтому подтверждено, что это находится в рамках контролируемого машинного обучения, и я думаю, вы знаете, что возможны два типа контролируемого машинного обучения.

Классификация: когда вывод является категоричным, например («ДА», «НЕТ»), («Яблоко», «Апельсин», «Банан»), (0, 1) и т. д.

Примеры: Обнаружение кошек и собак, Распознавание цифр, Обнаружение лицевой маски

Регрессия: когда выходные данные представлены в числовой форме или в непрерывной форме, например (88,7, 93,7, 0,04, 0,001).

примеры: прогноз цен на жилье, прогноз цен Storck и т. д.

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

#Шаги

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

  1. Данные (данные о ценах на жилье): загрузите набор данных.
  2. Предварительная обработка и анализ данных: проверка отсутствующих данных, ввод строки в числовой ввод
  3. Разделить данные: разделить данные на две части: одну для обучения, а другую для проверки.
  4. Модель: определите регрессионную модель
  5. Оценка режимаl: определение точности модели

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

#Данные

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

Загрузите набор данных отсюда: https://www.kaggle.com/datasets/yasserh/housing-prices-dataset

Да, набор данных находится в формате CSV, поэтому для обработки этого CSV и анализа этих данных мы используем pandas (библиотеку Python).

Давайте посмотрим, как мы можем использовать панд здесь.

Обзор кода:

Строка 1: импортировать библиотеку pandas

Строка 3: у Pandas есть метод read_csv для загрузки CSV-файла.

Строка 4: функция head() помогает отображать данные первых 5 строк

Анализ данных и предварительная обработка данных

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

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

data.info()

Метод info () возвращает информационные столбцы вместе с ненулевыми счетчиками и типом данных.

Здесь вы видите, что почти каждый столбец полностью заполнен, нет доступного нулевого значения, также вы можете видеть, что некоторые из столбцов являются числовыми (int64), а другие — строковыми (объект). Вы можете перекрестно проверить количество нулей, используя метод isnull()

data.isnull().sum() 

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

Хорошей новостью является то, что ни в одном из столбцов вы не получаете нулевого значения. Ничего исправлять не надо :)

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

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

Мы должны преобразовать эти категориальные значения «Да» и «Нет» в числовые значения. Итак, мы можем преобразовать Да в 1 и Нет в 0, используя простую программу на Python и встроенные методы panda.

Обзор кода:

Строка 2: выберите все столбцы в списке, которые имеют категориальное значение ("Да", "Нет").

Строка 4–5: Напишите функцию карты для преобразования «Да»: 1 и «Нет»: 0

Строка 8: примените вышеуказанную функцию binary_map к выбранному набору данных.

data.head()

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

Теперь последний столбец (статус мебели) содержит 3 категории: меблированные, полумеблированные иинемеблированные. Нам также нужно преобразовать это в числа.

table = pd.get_dummies(data['furnishingstatus'])   

#add the column into table variable

table.head() #display the first 5 rows of table

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

меблированный будет 00, и во избежание избыточности мы опускаем его. полу-меблированные будут 10 и немеблированные будут 01

table = pd.get_dummies(data['furnishingstatus'], drop_first = True)  
#recreate table but now drop the first column(furnished)

table.head() #Display first 5 rows of table

Давайте объединим два приведенных выше столбца с фактическим набором данных, используя метод concat.

data = pd.concat([data, table], axis = 1)  
#attach the other two columns to our data set

data.head() #Display first 5 rows

Здесь вы можете видеть, что в набор данных добавлены полуобставленные и необставленные столбцы.

Теперь, наконец, мы должны удалить furnishingstatus, это бесполезно.

data.drop(['furnishingstatus'], axis = 1, inplace = True)
#drop the old column from the dataset

data.head() # display first five rows

Теперь данные готовы к реализации. мы должны отделить функции и метки от данных, которые мы создали.

# Assigning of the necessary variable 

X = data.drop('price', axis = 1)
y = data['price']

Это означает, что X содержит все столбцы, кроме цены, а y содержит только столбец цены. И в соответствии с названием нашего проекта мы собираемся предсказать цену дома, поэтому мы используем столбец цены в качестве метки или цели.

Разделить данные

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

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test= train_test_split(X, y, test_size = 0.3, random_state = 4)

train_test_split — это функция скит-обучения, которая разбивает данные на две части, как вы видите в приведенном выше коде. train_test_split имеет несколько аргументов, первые два аргумента (X, y) понятны, третий аргумент test_size=0,3 означает, что данные будут разделены на таким образом, 30% данных идут на тестовые данные, а остальные 70% идут на данные обучения.

Модель

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

Список некоторых лучших моделей регрессора, которые можно применить здесь

  1. Линейная регрессия
  2. Регрессор дерева решений
  3. Случайный лес
  4. XGBRegressor

Линейная регрессия

Регрессор дерева решений

Регрессор случайного леса

Регрессор XGB

Обзор кода:

Строка 2: импорт модели с использованием библиотеки sk-learn

Строка 4: функция импорта метрик r2_score (коэффициент детерминанта)

Строка 6: Загрузите модель

Строка 8: модель поезда с использованием данных поезда (X_train, y_train)

Строка 11: прогнозировать выходные данные для тестовых данных (X_test) и сохранять их в переменной прогнозов.

Строка 13: сохранить точность с помощью функции r2_score

Строка 15: вывести точность.

Оценка

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

У нас есть точность всех четырех моделей

Линейная регрессия: 65,77

Регрессор дерева решений: 47,33

Случайный лесной регрессор: 59.02

Регрессор XGB: 57.07

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

Вы можете найти весь исходный код здесь: https://github.com/amide-inc/umed

Пожалуйста, проголосуйте, если вам нравится моя работа, это мотивирует меня работать лучше :)

Удачного кодирования…