«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Прогнозирование цен на жилье с помощью Scikit-learn: полное руководство

Прогнозирование цен на жилье с помощью Scikit-learn: полное руководство

Опубликовано 2 ноября 2024 г.
Просматривать:285

Predicting House Prices with Scikit-learn: A Complete Guide

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

Оглавление

  1. Введение в Scikit-learn
  2. Определение проблемы
  3. Сбор данных
  4. Предварительная обработка данных
  5. Выбор функций
  6. Обучение модели
  7. Оценка модели
  8. Настройка модели (оптимизация гиперпараметров)
  9. Развертывание модели
  10. Заключение

1. Введение в Scikit-learn

Scikit-learn — одна из наиболее широко используемых библиотек для машинного обучения на Python. Он предлагает простые и эффективные инструменты для анализа и моделирования данных. Независимо от того, имеете ли вы дело с классификацией, регрессией, кластеризацией или уменьшением размерности, scikit-learn предоставляет обширный набор утилит, которые помогут вам построить надежные модели машинного обучения.

В этом руководстве мы построим модель регрессии с использованием scikit-learn для прогнозирования цен на жилье. Давайте пройдемся по каждому этапу процесса.


2. Определение проблемы

Решаемая задача — спрогнозировать цену дома на основе его характеристик, таких как:

  • Количество спален
  • Количество ванных комнат
  • Площадь (в квадратных футах)
  • Расположение

Это задача обучения с учителем, в которой целевая переменная (цена дома) является непрерывной, что делает ее задачей регрессии. Scikit-learn предоставляет различные алгоритмы регрессии, такие как Линейная регрессия и Случайный лес, которые мы будем использовать в этом проекте.


3. Сбор данных

Вы можете использовать реальный набор данных, например набор данных Kaggle House Prices, или собрать собственные данные из общедоступного API.

Вот пример того, как могут выглядеть ваши данные:

Спальни Ванные комнаты Площадь (кв.футы) Расположение Цена ($)
3 2 1500 Бостон 300 000
4 3 2000 Сиэтл 500 000

Целевой переменной здесь является Цена.


4. Предварительная обработка данных

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

Обработка недостающих данных

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

data.fillna(data.median(), inplace=True)

Кодирование категориальных функций

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

from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
data['Location'] = encoder.fit_transform(data['Location'])

Масштабирование функций

Важно масштабировать такие функции, как площадь и цена, чтобы гарантировать, что они находятся в одном масштабе, особенно для алгоритмов, чувствительных к величине объекта. Вот как мы применяем масштабирование:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

5. Выбор функции

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

В этом проекте мы используем SelectKBest для выбора 5 лучших функций на основе их корреляции с целевой переменной:

from sklearn.feature_selection import SelectKBest, f_regression
selector = SelectKBest(score_func=f_regression, k=5)
X_new = selector.fit_transform(X, y)

6. Модельное обучение

Теперь, когда мы предварительно обработали данные и выбрали лучшие функции, пришло время обучить модель. Мы будем использовать два алгоритма регрессии: Линейная регрессия и Случайный лес.

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

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

from sklearn.linear_model import LinearRegression
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)

Случайный лес

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

from sklearn.ensemble import RandomForestRegressor
forest_model = RandomForestRegressor(n_estimators=100)
forest_model.fit(X_train, y_train)

Поезд-Тестовый Сплит

Чтобы оценить, насколько хорошо наши модели обобщают, мы разделили данные на обучающий и тестовый наборы:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=42)

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

После обучения моделей нам необходимо оценить их производительность с помощью таких показателей, как Среднеквадратическая ошибка (MSE) и R-квадрат (R²).

Среднеквадратическая ошибка (MSE)

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

from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)

R-квадрат (R²)

R² показывает, насколько хорошо модель объясняет дисперсию целевой переменной. Значение 1 означает идеальный прогноз:

from sklearn.metrics import r2_score
r2 = r2_score(y_test, y_pred)

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


8. Настройка модели (оптимизация гиперпараметров)

Чтобы еще больше повысить производительность модели, мы можем точно настроить гиперпараметры. Для случайного леса такие гиперпараметры, как n_estimators (количество деревьев) и max_eep (максимальная глубина деревьев), могут существенно повлиять на производительность.

Вот как использовать GridSearchCV для оптимизации гиперпараметров:

from sklearn.model_selection import GridSearchCV

param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20]
}

grid_search = GridSearchCV(RandomForestRegressor(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

best_model = grid_search.best_estimator_

9. Развертывание модели

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

Вот базовое приложение Flask для прогнозирования цен на жилье:

from flask import Flask, request, jsonify
import joblib

app = Flask(__name__)

# Load the trained model
model = joblib.load('best_model.pkl')

@app.route('/predict', methods=['POST'])
def predict():
    data = request.json
    prediction = model.predict([data['features']])
    return jsonify({'predicted_price': prediction[0]})

if __name__ == '__main__':
    app.run()

Сохраните обученную модель, используя joblib:

import joblib
joblib.dump(best_model, 'best_model.pkl')

Таким образом, вы можете делать прогнозы, отправляя запросы к API.


10. Заключение

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

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

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

Регрессия #AI #DataAnaанализ #DataPreprocessing #MLModel #RandomForest #LinearReгрессия #Flask #APIDevelopment #RealEstate #TechBlog #Tutorial #DataEngineering #DeepLearning #PredictiveAnalytics #DevCommunity

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/amitchandra/predicting-house-prices-with-scikit-learn-a-complete-guide-2kd7?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3