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

WBOY
發布: 2024-09-07 14:34:09
原創
512 人瀏覽過

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 收集您自己的資料。

以下是您的資料的範例:

Bedrooms Bathrooms Area (sq.ft) Location Price ($)
3 2 1500 Boston 300,000
4 3 2000 Seattle 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

以上是使用 Scikit-learn 預測房價:完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!