機械学習は、不動産を含むさまざまな業界を変革しています。一般的なタスクの 1 つは、寝室、バスルームの数、平方フィート、場所などのさまざまな特徴に基づいて住宅価格を予測することです。この記事では、scikit-learn を使用して住宅価格を予測する機械学習モデルを構築する方法を検討し、データの前処理からモデルの展開までのあらゆる側面をカバーします。
Scikit-learn は、Python での機械学習に最も広く使用されているライブラリの 1 つです。データ分析とモデリングのためのシンプルで効率的なツールを提供します。分類、回帰、クラスタリング、次元削減のいずれを扱う場合でも、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)
データを前処理して最適な特徴を選択したので、次はモデルをトレーニングします。 線形回帰とランダム フォレストの 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)
モデルをトレーニングした後、平均二乗誤差 (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