Maison >interface Web >js tutoriel >Prédire les prix des maisons avec XGBoost dans Node.js
XGBoost ist ein beliebter Algorithmus für maschinelles Lernen, der bei Kaggle und anderen Data-Science-Wettbewerben regelmäßig Spitzenplätze belegt. Was XGBoost auszeichnet, ist seine Fähigkeit, mehrere schwache Modelle (in diesem Fall Entscheidungsbäume) zu einem starken zu kombinieren. Dies geschieht durch eine Technik namens Gradient Boosting, die dazu beiträgt, den Algorithmus robust und hochwirksam für eine Vielzahl von Vorhersageaufgaben zu machen.
XGBoost verwendet Gradient Boosting, was bedeutet, dass Bäume nacheinander erstellt werden, wobei jeder Baum versucht, die Fehler der vorherigen Bäume zu korrigieren. Hier ist eine vereinfachte Ansicht des Prozesses:
Zum Beispiel, wenn wir Immobilienpreise vorhersagen:
Dieser Prozess, kombiniert mit cleverer Mathematik und Optimierungen, macht XGBoost sowohl präzise als auch schnell.
Während XGBoost ursprünglich als C-Bibliothek implementiert ist, stehen Bindungen für Sprachen wie Python und R zur Verfügung, wodurch es für eine breite Palette von Entwicklern zugänglich ist, die sich typischerweise auf Daten und maschinelles Lernen spezialisieren.
Ich hatte kürzlich ein Projekt, das eine starke Anforderung für Node.js hatte, also sah ich eine Möglichkeit, diese Lücke zu schließen, indem ich Bindungen für Node.js schrieb. Ich hoffe, dass dies dazu beiträgt, JavaScript-Entwicklern die Tür zu mehr ML zu öffnen.
In diesem Artikel werfen wir einen genaueren Blick auf die Verwendung von XGBoost in Ihren Node.js-Anwendungen.
Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
Installieren Sie die XGBoost Node.js-Bindungen mit npm:
npm install xgboost_node
Bevor wir uns mit dem Code befassen, wollen wir verstehen, was unsere Funktionen im Beispiel für die Hauspreisvorhersage darstellen:
// Each feature array represents: [square_feet, property_age, total_rooms, has_parking, neighborhood_type, is_furnished] // Example: [1200, 8, 10, 0, 1, 1 ]
Hier ist, was jede Funktion bedeutet:
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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!