Машинное обучение трансформирует различные отрасли, включая недвижимость. Одной из распространенных задач является прогнозирование цен на жилье на основе различных характеристик, таких как количество спален, ванных комнат, площадь в квадратных метрах и местоположение. В этой статье мы рассмотрим, как построить модель машинного обучения с использованием scikit-learn для прогнозирования цен на жилье, охватывая все аспекты, от предварительной обработки данных до развертывания модели.
Scikit-learn — одна из наиболее широко используемых библиотек для машинного обучения на Python. Он предлагает простые и эффективные инструменты для анализа и моделирования данных. Независимо от того, имеете ли вы дело с классификацией, регрессией, кластеризацией или уменьшением размерности, scikit-learn предоставляет обширный набор утилит, которые помогут вам построить надежные модели машинного обучения.
В этом руководстве мы построим модель регрессии с использованием scikit-learn для прогнозирования цен на жилье. Давайте пройдемся по каждому этапу процесса.
Решаемая задача — спрогнозировать цену дома на основе его характеристик, таких как:
Это задача обучения с учителем, в которой целевая переменная (цена дома) является непрерывной, что делает ее задачей регрессии. Scikit-learn предоставляет различные алгоритмы регрессии, такие как Линейная регрессия и Случайный лес, которые мы будем использовать в этом проекте.
Вы можете использовать реальный набор данных, например набор данных Kaggle House Prices, или собрать собственные данные из общедоступного API.
Вот пример того, как могут выглядеть ваши данные:
Спальни | Ванные комнаты | Площадь (кв.футы) | Расположение | Цена ($) |
---|---|---|---|---|
3 | 2 | 1500 | Бостон | 300 000 |
4 | 3 | 2000 | Сиэтл | 500 000 |
Целевой переменной здесь является Цена.
Прежде чем подавать данные в модель машинного обучения, нам необходимо их предварительно обработать. Сюда входит обработка пропущенных значений, кодирование категориальных признаков и масштабирование данных.
Отсутствующие данные часто встречаются в реальных наборах данных. Мы можем либо заполнить недостающие значения статистической мерой, например медианой, либо удалить строки с отсутствующими данными:
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)
Не все функции в равной степени влияют на целевую переменную. Выбор функций помогает определить наиболее важные функции, что повышает производительность модели и уменьшает переобучение.
В этом проекте мы используем 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)
Теперь, когда мы предварительно обработали данные и выбрали лучшие функции, пришло время обучить модель. Мы будем использовать два алгоритма регрессии: Линейная регрессия и Случайный лес.
Линейная регрессия проводит прямую линию через данные, сводя к минимуму разницу между прогнозируемыми и фактическими значениями:
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)
После обучения моделей нам необходимо оценить их производительность с помощью таких показателей, как Среднеквадратическая ошибка (MSE) и R-квадрат (R²).
MSE вычисляет среднеквадратичную разницу между прогнозируемыми и фактическими значениями. Более низкий MSE указывает на лучшую производительность:
from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, y_pred)
R² показывает, насколько хорошо модель объясняет дисперсию целевой переменной. Значение 1 означает идеальный прогноз:
from sklearn.metrics import r2_score r2 = r2_score(y_test, y_pred)
Сравните производительность моделей линейной регрессии и случайного леса, используя эти показатели.
Чтобы еще больше повысить производительность модели, мы можем точно настроить гиперпараметры. Для случайного леса такие гиперпараметры, как 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_
После того как вы обучили и настроили модель, следующим шагом станет ее развертывание. Вы можете использовать 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.
В этом проекте мы исследовали весь процесс построения модели машинного обучения с использованием scikit-learn для прогнозирования цен на жилье. От предварительной обработки данных и выбора функций до обучения, оценки и развертывания модели — каждый шаг был покрыт практическими примерами кода.
Независимо от того, являетесь ли вы новичком в машинном обучении или хотите применить scikit-learn в реальных проектах, в этом руководстве представлен комплексный рабочий процесс, который вы можете адаптировать для различных задач регрессии.
Не стесняйтесь экспериментировать с различными моделями, наборами данных и методами, чтобы повысить производительность и точность вашей модели.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3