首页 >web前端 >js教程 >使用 Node.js 中的 XGBoost 预测房价

使用 Node.js 中的 XGBoost 预测房价

Patricia Arquette
Patricia Arquette原创
2024-11-15 14:51:031102浏览

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 = 有停车位)
  • neighborhood_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();

这些参数会显着影响模型的性能和行为。例如:

  • 较低的最大深度有助于防止过度拟合,但如果太低,可能会欠拟合
  • 较低的 eta 意味着学习速度较慢,但​​可以带来更好的泛化能力
  • 较高的 num_round 意味着更多的树,这可以提高准确性,但会增加训练时间

结论

本指南提供了在 Node.js 中使用 XGBoost 的起点。对于生产用途,我建议:

  1. 了解并针对您的特定用例调整 XGBoost 参数
  2. 实施适当的交叉验证来评估您的模型
  3. 使用不同的数据场景进行测试以确保稳健性
  4. 监控生产中的模型性能

乔纳森·法罗

@farrow_jonny

以上是使用 Node.js 中的 XGBoost 预测房价的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn