ホームページ > ウェブフロントエンド > jsチュートリアル > Node.js の XGBoost を使用して住宅価格を予測する

Node.js の XGBoost を使用して住宅価格を予測する

Patricia Arquette
リリース: 2024-11-15 14:51:03
オリジナル
1105 人が閲覧しました

Predicting House Prices with XGBoost in Node.js

XGBoostとは何ですか?

XGBoost は、Kaggle やその他のデータ サイエンス コンペティションで常に上位に入る人気の機械学習アルゴリズムです。 XGBoost の特徴は、複数の弱いモデル (この場合はデシジョン ツリー) を組み合わせて強力なモデルを作成できることです。これは、勾配ブースティングと呼ばれる手法を通じて行われます。これにより、アルゴリズムが堅牢になり、さまざまな予測タスクに対して非常に効果的になります。

XGBoost はどのように機能しますか?

XGBoost は勾配ブースティングを使用します。これは、各ツリーが前のツリーの間違いを修正しようとするツリーを順番に構築することを意味します。プロセスを簡略化して示します:

  1. 初期予測を作成します (すべてのターゲット値の平均である可能性があります)
  2. この予測がどれだけ間違っていたか (誤差) を計算します
  3. このエラーを予測するためのデシジョン ツリーを構築します
  4. このツリーの予測を実行中の予測の合計に追加します (ただし、過信を防ぐためにスケールダウンされています)
  5. 手順 2 ~ 4 を何度も繰り返します

たとえば、住宅価格を予測する場合:

  • 最初のツリーは 200,000 ドルを予測する可能性があります
  • 実際の価格が $250,000 の場合、誤差は $50,000 です
  • 次のツリーは、この $50,000 のエラーの予測に焦点を当てています
  • すべてのツリーの予測を組み合わせた最終予測

このプロセスは、いくつかの賢い数学と最適化と組み合わされて、XGBoost を正確かつ高速にします。

Node.js で XGBoost を使用する理由

XGBoost は元々 C ライブラリとして実装されていますが、Python や R などの言語に利用できるバインディングがあり、通常はデータと機械学習を専門とする幅広い開発者がアクセスできます。

私は最近、Node.js に対する厳しい要件があるプロジェクトに携わっていたので、Node.js のバインディングを作成することでギャップを埋める機会があると考えました。これが、JavaScript 開発者にとってより多くの ML への扉を開く一助となることを願っています。

この記事では、Node.js アプリケーションで XGBoost を使用する方法を詳しく見ていきます。

前提条件

始める前に、次のものが揃っていることを確認してください。

  • Linux オペレーティング システム (xgboost_node の現在の要件)
  • Node.js バージョン 18.0.0 以降
  • 機械学習の概念の基本的な理解

インストール

npm を使用して XGBoost Node.js バインディングをインストールします:

npm install xgboost_node
ログイン後にコピー
ログイン後にコピー

データを理解する

コードに入る前に、住宅価格予測の例で特徴が何を表しているのかを理解しましょう。

// Each feature array represents:
[square_feet, property_age, total_rooms, has_parking, neighborhood_type, is_furnished]

// Example:
[1200,       8,            10,           0,           1,                1        ]
ログイン後にコピー
ログイン後にコピー

各機能の意味は次のとおりです:

  • square_feet: 不動産のサイズ (例: 1200 平方フィート)
  • property_age: 物件の築年数 (例: 8 年)
  • total_rooms: 部屋の総数 (例: 10 部屋)
  • has_parking: バイナリ (0 = 駐車場なし、1 = 駐車場あり)
  • neighbors_type: カテゴリ (1 = 住宅地、2 = 商業地域)
  • is_furnished: バイナリ (0 = 家具なし、1 = 家具あり)

対応するラベル配列には、千単位の住宅価格が含まれます (例: 250 は 250,000 ドルを意味します)。

データの変換

別の形式の生データがある場合、XGBoost 用に変換する方法は次のとおりです。

npm install xgboost_node
ログイン後にコピー
ログイン後にコピー

最初のモデルをトレーニングする

モデルをトレーニングして予測を行う方法を示す完全な例を次に示します。

// Each feature array represents:
[square_feet, property_age, total_rooms, has_parking, neighborhood_type, is_furnished]

// Example:
[1200,       8,            10,           0,           1,                1        ]
ログイン後にコピー
ログイン後にコピー

上記の例は、次の方法を示しています。

  1. 特徴とラベルを使用してトレーニング データを設定する
  2. トレーニング用に XGBoost パラメーターを構成する
  3. モデルをトレーニングする
  4. 新しいデータで予測を行う

モデル管理

XGBoost は、モデルを保存およびロードするための簡単な方法を提供します。

// Let's say you have data in this format:
const rawHouses = [
    {
        address: "123 Main St",
        sqft: 1200,
        yearBuilt: 2015,
        rooms: 10,
        parking: "Yes",
        neighborhood: "Residential",
        furnished: true,
        price: 250000
    },
    // ... more houses
];

// Transform it to XGBoost format:
const features = rawHouses.map(house => [
    house.sqft,
    new Date().getFullYear() - house.yearBuilt,  // Convert year built to age
    house.rooms,
    house.parking === "Yes" ? 1 : 0,             // Convert Yes/No to 1/0
    house.neighborhood === "Residential" ? 1 : 2, // Convert category to number
    house.furnished ? 1 : 0                       // Convert boolean to 1/0
]);

const labels = rawHouses.map(house => house.price / 1000); // Convert price to thousands
ログイン後にコピー

さらなる考慮事項

このモデルにはパラメータがあることに気づいたかもしれません。パラメーターを調整および選択する方法を理解するには、XGBoost のドキュメントを参照することをお勧めします。これらのパラメータの一部が達成しようとしていることは次のとおりです:

import xgboost from 'xgboost_node';

async function test() {
    const features = [
        [1200, 8, 10, 0, 1, 1],
        [800, 14, 15, 1, 2, 0],
        [1200, 8, 10, 0, 1, 1],
        [1200, 8, 10, 0, 1, 1],
        [1200, 8, 10, 0, 1, 1],
        [800, 14, 15, 1, 2, 0],
        [1200, 8, 10, 0, 1, 1],
        [1200, 8, 10, 0, 1, 1],
    ];
    const labels = [250, 180, 250, 180, 250, 180, 250, 180];

    const params = {
        max_depth: 3,
        eta: 0.3,
        objective: 'reg:squarederror',
        eval_metric: 'rmse',
        nthread: 4,
        num_round: 100,
        min_child_weight: 1,
        subsample: 0.8,
        colsample_bytree: 0.8,
    };

    try {
        await xgboost.train(features, labels, params);
        const predictions = await xgboost.predict([[1000, 0, 1, 0, 1, 1], [800, 0, 1, 0, 1, 1]]);
        console.log('Predicted value:', predictions[0]);
    } catch (error) {
        console.error('Error:', error);
    }
}

test();
ログイン後にコピー

これらのパラメーターは、モデルのパフォーマンスと動作に大きな影響を与えます。例:

  • max_ Depth を低くすると過学習を防ぐことができますが、低すぎると過小学習になる可能性があります
  • eta が低いほど学習は遅くなりますが、より良い一般化につながる可能性があります
  • num_round が大きいほどツリーが多くなり、精度は向上しますが、トレーニング時間が長くなります

結論

このガイドは、Node.js で XGBoost を使用するための開始点を提供します。運用環境での使用には、以下をお勧めします。

  1. 特定の使用例に合わせた XGBoost パラメータの理解と調整
  2. 適切な相互検証を実装してモデルを評価する
  3. 堅牢性を確保するために、さまざまなデータ シナリオを使用したテスト
  4. 本番環境でのモデルのパフォーマンスの監視

ジョナサン・ファロー

@farrow_jonny

以上がNode.js の XGBoost を使用して住宅価格を予測するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート