>웹 프론트엔드 >JS 튜토리얼 >Node.js에서 XGBoost를 사용하여 주택 가격 예측

Node.js에서 XGBoost를 사용하여 주택 가격 예측

Patricia Arquette
Patricia Arquette원래의
2024-11-15 14:51:031100검색

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 = 주차 있음)
  • neighbor_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();

이러한 매개변수는 모델의 성능과 동작에 큰 영향을 미칩니다. 예:

  • max_length를 낮추면 과적합을 방지하는 데 도움이 되지만 너무 낮으면 과소적합될 수 있습니다
  • 낮은 에타는 학습 속도가 느리다는 것을 의미하지만 더 나은 일반화로 이어질 수 있습니다
  • num_round가 높을수록 트리가 많아져 정확도는 향상되지만 훈련 시간은 늘어납니다

결론

이 가이드는 Node.js에서 XGBoost를 사용하기 위한 시작점을 제공합니다. 생산용으로는 다음을 권장합니다.

  1. 특정 사용 사례에 대한 XGBoost 매개변수 이해 및 조정
  2. 모델 평가를 위한 적절한 교차 검증 구현
  3. 견고함을 보장하기 위해 다양한 데이터 시나리오로 테스트
  4. 생산 중인 모델 성능 모니터링

조나단 패로우

@farrow_jonny

위 내용은 Node.js에서 XGBoost를 사용하여 주택 가격 예측의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.