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 ]
以下是每个功能的含义:
对应的标签数组包含以千为单位的房价(例如,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 ]
上面的示例展示了如何:
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();
这些参数会显着影响模型的性能和行为。例如:
本指南提供了在 Node.js 中使用 XGBoost 的起点。对于生产用途,我建议:
乔纳森·法罗
@farrow_jonny
以上是使用 Node.js 中的 XGBoost 预测房价的详细内容。更多信息请关注PHP中文网其他相关文章!