XGBoost は、Kaggle やその他のデータ サイエンス コンペティションで常に上位に入る人気の機械学習アルゴリズムです。 XGBoost の特徴は、複数の弱いモデル (この場合はデシジョン ツリー) を組み合わせて強力なモデルを作成できることです。これは、勾配ブースティングと呼ばれる手法を通じて行われます。これにより、アルゴリズムが堅牢になり、さまざまな予測タスクに対して非常に効果的になります。
XGBoost は勾配ブースティングを使用します。これは、各ツリーが前のツリーの間違いを修正しようとする場所でツリーを順番に構築することを意味します。プロセスを簡略化して示します:
たとえば、住宅価格を予測する場合:
このプロセスは、いくつかの賢い数学と最適化と組み合わされて、XGBoost を正確かつ高速にします。
XGBoost は元々 C ライブラリとして実装されていますが、Python や R などの言語に利用できるバインディングがあり、通常はデータと機械学習を専門とする幅広い開発者がアクセスできます。
私は最近、Node.js に対する厳しい要件があるプロジェクトに携わっていたので、Node.js のバインディングを作成することでギャップを埋める機会があると考えました。これが、JavaScript 開発者にとってより多くの ML への扉を開く一助となることを願っています。
この記事では、Node.js アプリケーションで XGBoost を使用する方法を詳しく見ていきます。
始める前に、次のものが揃っていることを確認してください。
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 ]
各機能の意味は次のとおりです:
And the corresponding labels array contains house prices in thousands (e.g., 250 means $250,000).
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
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:
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');
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:
This guide provides a starting point for using XGBoost in Node.js. For production use, I recommend:
Jonathan Farrow
@farrow_jonny
以上がNode.js の XGBoost を使用して住宅価格を予測するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。