Добро пожаловать и поздравляем! Вы начали внедрение машинного обучения на реальных наборах данных.
Как и программа 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 и т. д.
После этого рассмотрения мы можем сказать, что проект прогнозирования цен на жилье может быть решен с помощью алгоритмов машинного обучения с регрессионным наблюдением.
#Шаги
Вы видели выше, что есть шесть шагов, которые мы собираемся выполнить, чтобы завершить этот проект.
- Данные (данные о ценах на жилье): загрузите набор данных.
- Предварительная обработка и анализ данных: проверка отсутствующих данных, ввод строки в числовой ввод
- Разделить данные: разделить данные на две части: одну для обучения, а другую для проверки.
- Модель: определите регрессионную модель
- Оценка режима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% идут на данные обучения.
Модель
Операция с данными выполнена, давайте используем эти данные для обучения, но перед обучением нам нужно выбрать модель для обучения. Вы знаете, что прогнозирование цен на жилье находится под контролем машинного обучения с регрессией, поэтому мы должны найти какую-то модель регрессора.
Список некоторых лучших моделей регрессора, которые можно применить здесь
- Линейная регрессия
- Регрессор дерева решений
- Случайный лес
- 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
Пожалуйста, проголосуйте, если вам нравится моя работа, это мотивирует меня работать лучше :)
Удачного кодирования…