기계 학습 알고리즘 - XGBoost

7976 단어
1. 혁신 점
주요 혁신 점:
  • 고도 로 확장 가능 한 엔 드 트 리 시스템 을 설계 하고 구축 합 니 다.이론 적 으로 합 리 적 인 가중 분 위수 약도 (weighted quantile sketch) 를 제시 하여 후보 집 을 계산 하 였 다.
  • 새로운 희소 감지 알고리즘 을 도입 하여 병렬 트 리 학습 에 사용 했다.부족 한 값 을 기본 방향 으로 합 니 다.
  • 핵 외 트 리 학습 에 효과 적 인 캐 시 감지 블록 구 조 를 제시 했다.정렬 후 흐 트 러 진 색인 의 열 데 이 터 를 캐 시 로 빠르게 찾 는 과정 입 니 다.

  • 링크:https://www.jianshu.com/p/a62f4dce3ce8
    2. 원리
    XGBoost 는 CART 회귀 트 리 와 같은 생각 을 사용 하고 탐욕 알고리즘 을 이용 하여 모든 특징의 모든 특징 구분 점 을 옮 겨 다 니 며 사용 하 는 목표 함수 가 다르다.구체 적 인 방법 은 분 단 된 목표 함수 값 이 단자 잎 노드 의 목표 함수 보다 이득 을 얻 는 동시에 나무의 성장 이 너무 깊 은 것 을 제한 하기 위해 한도 값 을 추가 하고 이득 이 이 한도 값 보다 클 때 만 분열 하 는 것 이다.따라서 계속 분열 되 어 한 그루 의 나 무 를 형성 하고 한 그루 의 나 무 를 형성 하 며 매번 에 지난번 의 예측 을 바탕 으로 가장 좋 은 분열 / 나 무 를 구축한다.
    3. XGBoost 의 장단 점
    GBDT 와 비교
  • GBDT 의 기본 분류 기 CART , XGBoost 지원 은 L1 과 L2 정규 항 을 가 진 논리 회귀 (분류 문제) 와 선형 회귀 (회귀 문제) 에 해당 한다.
  • GBDT 는 최적화 시 만 사 용 했 고 XGBoost 는 목표 함수 를 진행 했다. 그 밖 에 XGBoost 지원 은 손실 함수 2 단계 만 유도 할 수 있다
  • .
  • XGBoost 는 무 작위 삼림 알고리즘 을 참고 하여 열 표본 추출 과 행 표본 추출 을 지원 한다. 그러면 의합 위험 을 낮 출 수 있 고 계산 도 낮 출 수 있다.
  • XGBoost 는 에서 정규 항 은 L2 를 포함한다.트 리 구 조 를 제약 함으로써 모델 의 방 차 를 낮 추고 의합 을 방지한다.
  • XGBoost , 분열 방향 자동 학습
  • XGBoost 는 모든 단계 에서 , 후속 모델 로 하여 금 더욱 큰 최적화 공간 을 가지 게 하고 과 의합 을 방지 하도록 한다.
  • XGBoost 는 훈련 전에 데 이 터 를 미리 정렬 하여 Block 으로 저장 하고 후속 교체 에서 중복 사용 하여 계산 을 줄 이 는 동시에 분할 점 을 계산 할 때 병행 계산 할 수 있다
  • 병행 할 수 있 는 유사 직사 도 알고리즘 은 나무 결점 이 분 단 될 때 각 노드 의 이득 을 계산 해 야 한다. 만약 에 데이터 의 양 이 많 으 면 모든 노드 의 특징 을 정렬 하고 가장 좋 은 분할 점 을 얻 을 수 있다. 이런 욕심 법 은 이상 하 게 시간 이 소모 된다. 이때 효율 적 인 분할 점 을 생 성 하 는 데 사용 된다. 즉, 분 단 된 특정한 값 으로 분 단 전의 특정한 값 을 뺀 것 이다.이득 을 얻 고 나무의 성장 을 제한 하기 위해 한도 값 을 도입 하여 이득 이 한도 값 보다 클 때 분열 한다.LightGBM 과 비교
  • XGBoost 는 사전 정렬 을 사용 하고 교체 하기 전에 결점 의 특징 에 대해 사전 정렬 을 한다. 가장 좋 은 분할 점 을 선택 하고 데이터 의 양 이 많 을 때 욕심 법 은 시간 을 소모 한다. LightGBM 방법 은 histogram 알고리즘 을 사용 하여 차지 하 는 메모리 가 낮 고 데이터 분할 의 복잡 도가 낮 지만 가장 정확 한 데이터 분할 점 을 찾 을 수 없다.또한 부정 확 한 분할 점 은 과 의합 을 낮 추 는 수단 이 라 고 볼 수 있다.
  • LightGBM 은 Adaboost 의 사상 을 참고 하여 샘플 에 대해 경사도 샘플링 을 한 다음 에 이득 을 계산 하여 계산
  • 을 낮 추 었 다.
  • LightGBM 은 열 을 합병 하여 계산
  • 을 낮 추 었 다.
  • XGBoost 샘플링 level - wise 전략 은 결정 트 리 의 생 성 을 하 는 동시에 같은 층 의 노드 를 분열 시 키 고 다 중 스 레 드 최적화 로 적합 하기 쉽 지 않 지만 일부 노드 의 분열 이득 이 매우 작 아서 분할 할 필요 가 없 기 때문에 불필요 한 계산 을 가 져 왔 다.LightGBM 샘플링 leaf - wise 전략 은 나무의 생 성 을 진행 합 니 다. 매번 현재 잎 노드 에서 가장 큰 이득 을 얻 는 노드 를 선택 하여 분열 을 진행 합 니 다. 이렇게 교체 하지만 깊이 가 깊 은 나무 가 생기 기 쉽 고 의합 이 생 겨 서 최대 깊이 의 제한 을 증가 하여 높 은 효 과 를 확보 하 는 동시에 과 의합 을 방지 합 니 다.

  • 4.API
    데이터 읽 기
    dtrain = xgb.DMatrix(‘demo/data/agaricus.txt.train’)
    dtest = xgb.DMatrix(‘demo/data/agaricus.txt.test’)
    

    map 를 통 해 매개 변 수 를 지정 합 니 다.
    param = {‘max_depth’:2, ‘eta’:1, ‘silent’:1, ‘objective’:‘binary:logistic’ }
    num_round = 2
    bst = xgb.train(param, dtrain, num_round)
    

    예측 하 다.
    preds = bst.predict(dtest)
    

    DMatrix 대상 에 numpy 의 배열 을 불 러 오 려 면 코드 는 다음 과 같 습 니 다.
    import numpy as np
    import xgboost as xgb
    data = np.random.rand(5,10) # 5 entities, each contains 10 features
    label = np.random.randint(2, size=5) # binary target
    dtrain = xgb.DMatrix( data, label=label)
    

    ->data
    array([[4.58112586e-01, 5.15109055e-01, 9.49322368e-01, 4.12068451e-01,
            9.07828945e-01, 6.01836350e-01, 2.67689084e-02, 8.71999699e-01,
            9.70469774e-01, 4.08043402e-01],
           [3.84152246e-01, 3.33657143e-01, 5.09202802e-01, 7.49937855e-01,
            6.76731623e-01, 5.98826160e-01, 8.87044516e-01, 2.42738478e-01,
            5.54069014e-01, 7.31676395e-01],
           [4.31604612e-04, 2.37646980e-01, 7.08828313e-01, 2.97212746e-01,
            7.08635495e-01, 5.25163997e-01, 3.93572198e-01, 9.49710807e-01,
            7.81015022e-01, 2.29557159e-01],
           [7.72886296e-01, 2.38108229e-01, 1.25507593e-01, 2.79567575e-01,
            2.82561160e-02, 7.04470072e-01, 2.61917976e-01, 5.98723606e-01,
            6.72975320e-01, 7.21076548e-01],
           [2.88186647e-01, 6.24797266e-01, 5.15669053e-01, 8.68095215e-01,
            4.43562171e-01, 5.07861559e-01, 6.53741982e-01, 9.29474058e-01,
            7.91150281e-02, 1.52469552e-01]])
    

    -> label
    array([1, 1, 1, 0, 0])
    

    -> dtrain
    
    
  • 희소 행렬 의 Dmartix 데이터 가 져 오기
  • import scipy
    csr = scipy.sparse.csr_matrix((dat, (row, col)))
    dtrain = xgb.DMatrix(csr)
    
  • 자체 테이프 의 libsvm 데이터 형식 사용
  • dtrain = xgb.DMatrix(‘train.svm.txt’)
    dtrain.save_binary(“train.buffer”)
    
  • 사용자 정의 부족 값
  • dtrain = xgb.DMatrix(data, label=label, missing = -999.0)
    
  • 필요 시 가중치 설정
  • w = np.random.rand(5, 1)
    dtrain = xgb.DMatrix(data, label=label, missing = -999.0, weight=w)
    
  • 사전 형식 으로 매개 변 수 를 설정 합 니 다
  • param = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' }
    param['nthread'] = 4
    param['eval_metric'] = 'auc'
    
  • 기타 평가 지표
  • param[‘eval_metric’] = [‘auc’, ‘ams@0’]
    #alternativly:
    #plst = param.items()
    #plst += [(‘eval_metric’, ‘ams@0’)]
    
  • 지정 테스트 집합
  • evallist  = [(dtest,‘eval’), (dtrain,‘train’)]
    
  • 훈련
  • num_round = 10
    bst = xgb.train( plst, dtrain, num_round, evallist )
    
  • 모델 저장
  • bst.save_model(‘0001.model’)
    
    #    
    bst.dump_model(‘dump.raw.txt’)
    #         
    bst.dump_model(‘dump.raw.txt’,‘featmap.txt’)
    
  • 로드 모델
  • bst = xgb.Booster({‘nthread’:4}) #init model
    bst.load_model(“model.bin”) # load data
    
  • 조기 정지
  • 인증 집합 이 있다 면 최 적 수량 boosting rounds( ) 을 찾 는 것 을 미리 중단 할 수 있 습 니 다. 미리 중단 하려 면 최소한 하나의 evals 집합 이 필요 합 니 다. 여러 개가 있 으 면 마지막 을 사용 합 니 다. train(…, evals=evals, early_stopping_rounds=10) 이 모델 은 점수 가 올 라 갈 때 까지 훈련 을 시작 합 니 다. 검증 오 류 는 적어도 한 개 early_stopping_rounds 씩 줄 여 훈련 을 계속 해 야 합 니 다.
    미리 멈 추 면 모델 은 세 개의 추가 필드 가 있 습 니 다. bst.best_score, bst.best_iteration bst.best_ntree_limit. 주의 하 십시오 train() 는 지난번 교체 에서 가장 좋 은 것 이 아니 라 모델 을 되 돌려 줍 니 다. 이것 은 두 개의 도량형 기준 과 함께 사용 하여 (RMSE, ) (MAP, NDCG, AUC) 에 달 합 니 다. 여러 개의 평가 기준 을 지정 하면 param [‘eval_metric’] 중의 마지막 하 나 는 미리 멈 추 는 데 사 용 됩 니 다.
  • 예측
  • #7    ,       10    
    data = np.random.rand(7, 10)
    dtest = xgb.DMatrix(data)
    ypred = bst.predict(xgmat)
    

    훈련 중 미리 멈 추 면 쓸 수 있다 bst.best_ntree_limit최 적 교체 에서 예측 결 과 를 얻 었 다. ypred = bst.predict(xgmat,ntree_limit=bst.best_ntree_limit) 훈련 정밀도 가 높 은 것 을 관찰 했 지만 테스트 정밀도 가 낮 을 때 문제 에 부 딪 혔 을 것 이다.일반적으로 xgboost 의 과 의합 을 제어 할 수 있 는 두 가지 방법 이 있다.첫 번 째 방법 은 모델 의 복잡 도 를 직접 통제 하 는 것 이다. 이 는 max_depth, min_child_weight gamma 두 번 째 방법 은 무 작위 성 을 증가 시 키 고 훈련 이 소음 에 강 한 것 을 포함한다 subsample, colsample_bytree. 걸음 길 이 를 줄 일 수 있다 eta. 그러나 이렇게 할 때 증가 하 는 것 을 기억 해 야 한다 num_round.
  • 불 균형 한 데이터 세트 처리
  • 광고 클릭 로그 등 흔 한 상황 에 대해 데이터 세트 는 매우 불 균형 적 이다.이것 은 xgboost 모델 의 훈련 에 영향 을 줄 수 있 으 며, 두 가지 방법 으로 그것 을 개선 할 수 있다.예측 (AUC) 을 통 해 균형 scale_pos_weightpositive 의 가중치 에 만 관심 이 있다 면.
  • AUC 로 평가
  • 만약 에 정확 한 확률 을 예측 하 는 데 관심 이 있다 면 데이터 세트 를 다시 균형 시 킬 수 없습니다. 이런 상황 에서 매개 변수 negative 를 유한 한 숫자 (예 를 들 어 1) 로 설정 하면 max_delta_step원본 링크:https://blog.csdn.net/weixin_40083227/article/details/103610953

    좋은 웹페이지 즐겨찾기