機器學習正在改變各個行業,包括房地產。一項常見的任務是根據臥室、浴室數量、平方英尺和位置等各種特徵來預測房價。在本文中,我們將探討如何使用 scikit-learn 建立機器學習模型來預測房價,涵蓋從資料預處理到模型部署的各個方面。
Scikit-learn 是 Python 中使用最廣泛的機器學習函式庫之一。它為數據分析和建模提供了簡單且有效率的工具。無論您是在處理分類、回歸、聚類還是降維,scikit-learn 都提供了一組廣泛的實用程式來幫助您建立強大的機器學習模型。
在本指南中,我們將使用 scikit-learn 建立一個迴歸模型來預測房價。讓我們逐步了解流程的每個步驟。
目前的任務是根據房屋的特徵來預測其價格,例如:
這是一個監督學習問題,其中目標變數(房價)是連續的,使其成為回歸任務。 Scikit-learn 提供了多種迴歸演算法,例如我們將在本專案中使用的線性迴歸和隨機森林。
您可以使用真實世界的資料集(例如 Kaggle 房價資料集),也可以從公共 API 收集您自己的資料。
以下是您的資料的範例:
Bedrooms | Bathrooms | Area (sq.ft) | Location | Price ($) |
---|---|---|---|---|
3 | 2 | 1500 | Boston | 300,000 |
4 | 3 | 2000 | Seattle | 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,本指南都提供了一個全面的工作流程,您可以根據它來適應各種回歸任務。
隨意嘗試不同的模型、資料集和技術,以提高模型的效能和準確性。
以上是使用 Scikit-learn 預測房價:完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!