机器学习正在改变各个行业,包括房地产。一项常见的任务是根据卧室、浴室的数量、平方英尺和位置等各种特征来预测房价。在本文中,我们将探讨如何使用scikit-learn构建机器学习模型来预测房价,涵盖从数据预处理到模型部署的各个方面。
Scikit-learn 是 Python 中使用最广泛的机器学习库之一。它为数据分析和建模提供了简单高效的工具。无论您是处理分类、回归、聚类还是降维,scikit-learn 都提供了一组广泛的实用程序来帮助您构建强大的机器学习模型。
在本指南中,我们将使用 scikit-learn 构建回归模型来预测房价。让我们逐步了解该过程的每个步骤。
手头的任务是根据房屋的特征来预测其价格,例如:
这是一个监督学习问题,其中目标变量(房价)是连续的,使其成为回归任务。 Scikit-learn 提供了多种回归算法,例如我们将在本项目中使用的线性回归和随机森林。
您可以使用真实世界的数据集(例如 Kaggle 房价数据集),也可以从公共 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_depth(树的最大深度)这样的超参数会显着影响性能。
以下是如何使用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 创建一个提供预测服务的简单 Web 应用程序。
这是一个用于房价预测的基本 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