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

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

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: The size of the property (e.g., 1200 sq ft)
  • property_age: Age of the property in years (e.g., 8 years)
  • total_rooms: Total number of rooms (e.g., 10 rooms)
  • has_parking: Binary (0 = no parking, 1 = has parking)
  • neighborhood_type: Category (1 = residential, 2 = commercial area)
  • is_furnished: Binary (0 = unfurnished, 1 = furnished)

And the corresponding labels array contains house prices in thousands (e.g., 250 means $250,000).

Transforming Your Data

If you have raw data in a different format, here's how to transform it for 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
ログイン後にコピー

Training Your First Model

Here's a complete example that shows how to train a model and make predictions:

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();
ログイン後にコピー

The example above shows how to:

  1. Set up training data with features and labels
  2. Configure XGBoost parameters for training
  3. Train the model
  4. Make predictions on new data

Model Management

XGBoost provides straightforward methods for saving and loading models:

// Save model after training
await xgboost.saveModel('model.xgb');

// Load model for predictions
await xgboost.loadModel('model.xgb');
ログイン後にコピー

Further Considerations

You may have noticed there are parameters for this model. I would advise looking into XGBoost documentation to understand how to tune and choose your parameters. Here's what some of these parameters are trying to achieve:

const params = {
    max_depth: 3,              // Controls how deep each tree can grow
    eta: 0.3,                 // Learning rate - how much we adjust for each tree
    objective: 'reg:squarederror',  // For regression problems
    eval_metric: 'rmse',      // How we measure prediction errors
    nthread: 4,               // Number of parallel processing threads
    num_round: 100,           // Number of trees to build
    min_child_weight: 1,      // Minimum amount of data in a leaf
    subsample: 0.8,           // Fraction of data to use in each tree
    colsample_bytree: 0.8,    // Fraction of features to consider for each tree
};
ログイン後にコピー

These parameters significantly impact your model's performance and behavior. For example:

  • Lower max_depth helps prevent overfitting but might underfit if too low
  • Lower eta means slower learning but can lead to better generalization
  • Higher num_round means more trees, which can improve accuracy but increases training time

Conclusion

This guide provides a starting point for using XGBoost in Node.js. For production use, I recommend:

  1. Understanding and tuning the XGBoost parameters for your specific use case
  2. Implementing proper cross-validation to evaluate your model
  3. Testing with different data scenarios to ensure robustness
  4. Monitoring model performance in production

Jonathan Farrow

@farrow_jonny

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

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