ホームページ >バックエンド開発 >Python チュートリアル >Scikit-learn を使用した住宅価格の予測: 完全ガイド

Scikit-learn を使用した住宅価格の予測: 完全ガイド

WBOY
WBOYオリジナル
2024-09-07 14:34:09630ブラウズ

Predicting House Prices with Scikit-learn: A Complete Guide

機械学習は、不動産を含むさまざまな業界を変革しています。一般的なタスクの 1 つは、寝室、バスルームの数、平方フィート、場所などのさまざまな特徴に基づいて住宅価格を予測することです。この記事では、scikit-learn を使用して住宅価格を予測する機械学習モデルを構築する方法を検討し、データの前処理からモデルの展開までのあらゆる側面をカバーします。

目次

  1. Scikit-learn の概要
  2. 問題の定義
  3. データ収集
  4. データの前処理
  5. 機能の選択
  6. モデルトレーニング
  7. モデルの評価
  8. モデルのチューニング (ハイパーパラメーターの最適化)
  9. モデルのデプロイ
  10. 結論

1. Scikit-learn の概要

Scikit-learn は、Python での機械学習に最も広く使用されているライブラリの 1 つです。データ分析とモデリングのためのシンプルで効率的なツールを提供します。分類、回帰、クラスタリング、次元削減のいずれを扱う場合でも、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. モデルのトレーニング

データを前処理して最適な特徴を選択したので、次はモデルをトレーニングします。 線形回帰ランダム フォレストの 2 つの回帰アルゴリズムを使用します。

線形回帰

線形回帰はデータを直線で近似し、予測値と実際の値の差を最小限に抑えます。

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 #データ分析 #データ前処理 #MLModel #RandomForest #LinearRegression #Flask #APIDevelopment #RealEstate #TechBlog #チュートリアル #データエンジニアリング #ディープラーニング #予測分析 #DevCommunity

以上がScikit-learn を使用した住宅価格の予測: 完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。