」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 Scikit-learn 預測房價:完整指南

使用 Scikit-learn 預測房價:完整指南

發佈於2024-11-02
瀏覽:335

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 房价数据集),也可以从公共 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_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_

9. 模型部署

训练并调整模型后,下一步就是部署。您可以使用 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 发送请求来进行预测。


10. 结论

在这个项目中,我们探索了使用 scikit-learn 构建机器学习模型来预测房价的整个过程。从数据预处理、特征选择到模型训练、评估、部署,每一步都配有实用的代码示例。

无论您是机器学习新手还是希望在实际项目中应用 scikit-learn,本指南都提供了一个全面的工作流程,您可以根据它来适应各种回归任务。

随意尝试不同的模型、数据集和技术,以提高模型的性能和准确性。

回归 #AI #DataAnalysis #DataPreprocessing #MLModel #RandomForest #LinearRegression #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]刪除
最新教學 更多>
  • EchoAPI 與 Insomnia:結合實例進行綜合比較
    EchoAPI 與 Insomnia:結合實例進行綜合比較
    作为一名全栈开发人员,我知道拥有一流的工具来调试、测试和记录 API 是多么重要。 EchoAPI 和 Insomnia 是两个出色的选项,每个选项都有自己独特的特性和功能。让我带您了解这些工具,比较它们的功能和优点,给您一些实际示例,并帮助您决定何时使用 EchoAPI 或 Insomnia。 ...
    程式設計 發佈於2024-11-02
  • 出發時間和持續時間|程式設計教學
    出發時間和持續時間|程式設計教學
    介紹 本實驗旨在測試您對 Go 的時間和持續時間支援的理解。 時間 下面的程式碼包含如何在 Go 中使用時間和持續時間的範例。但是,程式碼的某些部分遺失了。您的任務是完成程式碼,使其按預期工作。 Go程式語言基礎知識。 熟悉 Go 的時間和持續時間支援。 $ ...
    程式設計 發佈於2024-11-02
  • 起重面試問答
    起重面試問答
    1. JavaScript 中什么是提升? 答案: 提升是执行上下文创建阶段为变量和函数分配内存的过程。在此过程中,为变量分配了内存,并为变量分配了值 undefined。对于函数,整个函数定义存储在内存中的特定地址,并且对其的引用放置在该特定执行上下文中的堆栈上。 ...
    程式設計 發佈於2024-11-02
  • 了解 JavaScript 中的文件物件模型 (DOM)
    了解 JavaScript 中的文件物件模型 (DOM)
    你好,神奇的 JavaScript 開發者? 瀏覽器提供了一個稱為文檔物件模型 (DOM) 的程式設計接口,它允許腳本(特別是 JavaScript)與網頁佈局進行互動。網頁的文檔物件模型 (DOM) 是一種分層樹狀結構,它將頁面的元件排列成對象,由瀏覽器在載入時建立。借助此範例,...
    程式設計 發佈於2024-11-02
  • 開始使用 SPRING BATCH 進行編程
    開始使用 SPRING BATCH 進行編程
    Introduction Dans vos projets personnels ou professionnels, Il vous arrive de faire des traitements sur de gros volumes de données. Le traite...
    程式設計 發佈於2024-11-02
  • 使用 CSS 讓您的 Github 個人資料脫穎而出
    使用 CSS 讓您的 Github 個人資料脫穎而出
    以前,自訂 Github 個人資料的唯一方法是更新圖片或更改名稱。這意味著每個 Github 設定檔看起來都一樣,自訂它或脫穎而出的選項很少。 從那時起,您可以選擇使用 Markdown 建立自訂部分。您可以包括您的履歷、您的興趣和嗜好,讓您的個人資料反映您的身分。這是任何人在訪問您的個人資料時看...
    程式設計 發佈於2024-11-02
  • TypeScript 實用程式類型:增強程式碼可重複使用性
    TypeScript 實用程式類型:增強程式碼可重複使用性
    TypeScript 提供內建實用程式類型,讓開發人員有效地轉換和重複使用類型,讓您的程式碼更加靈活和 DRY。在本文中,我們將探討關鍵實用程式類型,例如 Partial、Pick、Omit 和 Record,以協助您將 TypeScript 技能提升到新的水平。 Partial:使所有屬性可選 ...
    程式設計 發佈於2024-11-02
  • 電報 window.open(url, &#_blank&#);在ios上工作很奇怪
    電報 window.open(url, &#_blank&#);在ios上工作很奇怪
    我正在製作一個電報機器人,我想添加將一些資訊從小型應用程式轉發到聊天的選項。我決定使用 window.open(url, '_blank');在我在 iPhone 上嘗試之前它一直運作良好。我沒有轉發,而是分享(這是一件大事,我正好需要轉發一條訊息)。我有一些如何處理它的想法,但它們...
    程式設計 發佈於2024-11-02
  • 誰是前端開發人員?
    誰是前端開發人員?
    當今網路上每個網站或平台的使用者介面部分都是前端開發人員工作的結果。他們參與創建用戶友好的介面,確保網站的外觀和功能。但到底誰是前端開發人員呢?我簡單解釋一下。 用戶看到的部分是前端 開啟網站時首先看到的是網頁介面:顏色、按鈕、文字、動畫。這都是由前端開發人員創建的。前端是網站或應...
    程式設計 發佈於2024-11-02
  • 如何使用保留的 CSS 樣式將 HTML 內容儲存為 PDF?
    如何使用保留的 CSS 樣式將 HTML 內容儲存為 PDF?
    使用CSS 將HTML 內容儲存為PDF在Web 開發中,即使將內容匯出為不同格式,保持視覺美觀也至關重要。當嘗試將 HTML 元素儲存為 PDF 時,這可能會帶來挑戰,因為 CSS 樣式可能會在轉換過程中遺失。 對於必須在已儲存的PDF 中保留CSS 的情況,請考慮使用以下方法:建立新視窗: 開啟...
    程式設計 發佈於2024-11-02
  • 為什麼使用 Print_r() 時要為 DateTime 物件新增幻像屬性?
    為什麼使用 Print_r() 時要為 DateTime 物件新增幻像屬性?
    Print_r() 變更 DateTime 物件Print_r() 在 DateTime 物件上新增屬性,以便在偵錯期間啟用自省。此行為是 PHP 5.3 中引入的內部功能的副作用,它將幻像公共屬性指派給轉儲到文字的實例。 要避免這些屬性所造成的錯誤,請改用反射。然而,不建議尋找這些屬性,因為它們沒...
    程式設計 發佈於2024-11-02
  • C 語言的資料結構與演算法:適合初學者的方法
    C 語言的資料結構與演算法:適合初學者的方法
    在 C 語言中,資料結構和演算法用於組織、儲存和操作資料。資料結構:陣列:有序集合,使用索引存取元素鍊錶:透過指標連結元素,支援動態長度堆疊:先進後出(FILO) 原則佇列:先進先出(FIFO) 原則樹:分級組織資料演算法:排序:依特定順序排序元素搜尋:在集合中尋找元素圖形:處理節點與邊之間的關係實...
    程式設計 發佈於2024-11-02
  • ## `has_key()` 還是 `in`?  在 Python 中檢查字典鍵的最佳方法是什麼?
    ## `has_key()` 還是 `in`? 在 Python 中檢查字典鍵的最佳方法是什麼?
    在Python 中選擇「has_key()」和「in」來檢查字典鍵當涉及驗證是否存在Python 字典中的特定鍵,「has_key()」和「in」都提供了可行的選項。然而,首選方法隨著時間的推移而演變。 歷史上,「has_key()」通常用來檢查字典中鍵是否存在。然而,此函數已在 Python 3....
    程式設計 發佈於2024-11-02
  • 如何使用 AJAX 將 JSON 資料傳送到 PHP?
    如何使用 AJAX 將 JSON 資料傳送到 PHP?
    如何使用Ajax 將JSON 資料傳輸到PHP如何使用Ajax 將JSON 資料傳輸到PHP為了以JSON 格式將資料傳輸到PHP 腳本,至關重要的是能夠使用AJAX 有效地發送資料。 發送 JSON 資料$.ajax({ type: "POST", dataType: ...
    程式設計 發佈於2024-11-02
  • JS:承諾還是回調?
    JS:承諾還是回調?
    理解 JavaScript 中的 Promise 與 Callback 認證測驗的關鍵問題和解答 什麼是回呼函數,它與常規函數有何不同? 回呼函數作為參數傳遞給另一個函數並被呼叫以處理非同步操作。與常規函數不同,回呼被設計為在完成某個任務後執行。 與回呼相比,P...
    程式設計 發佈於2024-11-02

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3