"붕어가 되어가는 나를 위해..."

 

추천 강의

 

StatQuest 의 XGBoost 강의 시리즈 [링크]

 

XGBoost 의 기본 개념부터 사용되는 수식의 유도까지 모두 다룬다. BAM~~ (Part4 까지 볼것.)

 

이전 시리즈인  Gradient Boost (Part1~3) 도 볼 것을 추천함.

 

 

기억해야할 Terms

 

  • Initial Prediction : 학습, 예측 모든 과정에서 사용되는 초기 예측값 (보통 레이블의 통계정보를 활용하여 설정)

  • Similarity : 해당 노드에 속한 sample들의 유사성 점수 (정규화 상수 reg_lambda 가 사용됨)

    • lambda 의 역할

      • Similarity 의 점수를 낮춘다.

      • Leaf 에 있는 sample의 수가 적을 수록 Similarity 점수를 더욱 많이 낮춘다.  (Gain이 작아짐)

      • 결국, pruning이 더 잘 일어나도록 만든다.

      • 더욱 일반화된 트리가 형성되도록 한다.

  • Gain : 트리가 분기함에 따라 높아진 Similarity 의 값 (분가를 시킬 변수를 결정할때 사용됨.)

  • 양자화(Quantization, feat.binning) : continuous 한 값을 갖는 변수의 모든 영역을 분기의 기준으로 삼을 수 없기에 영역을 지정하고 binning을 통해 진행함.

  • Missing Value 의 처리 - 완벽한 feature를 가지고 있지 않은 샘플에 대한 예측 및 고도화 전략

  • Pruning (Post prunning) : 일반화를 위한 pruning. (pruning 상수 gamma가 사용됨)

    • Pruning은 Gain 값을 기준으로 진행됨.

    • gamma가 0이라고 pruning 이 진행되지 않는 것은 아님.

  • Learning Rate (eta)

 

 

학습

 

매번의 Single Tree 학습은 아래와 같은 순서를 반복한다.

  1. 모든 Residual 계산 (이전 트리까지의 output 값을 이용)

  2. Build Tree (Gain, Similarity, lambda, max_depth 이용)

  3. Prune Tree (Gain, gamma 이용)

  4. 최종 output 값 계산 (learning_rate, lamba, initial_prediction 이용)

 

학습의 종료

  • n_estimator 만큼 트리를 반복적으로 생성 

  • 매 트리 생성 시 마다 dev 셋의 성능을 측정.

  • early_stopping_rounds 동안 성능의 향상이 없다면 신규 Tree 생성을 종료

 

수식 (Regression) - classification은 다름

 

Similarity = (Sum of Residuals)^2 / (# of Residuals)

 

Output = (Sum of Residuals)^2 / (# of Residuals)

 

Gain = LeftGain + RightGain - ParentGain

 

 

'기계학습' 카테고리의 다른 글

Optimizer 종류  (0) 2022.01.01
GCN (Graph Convolution Network)  (0) 2021.12.29
Gradient Boost for classification (binary)  (0) 2020.08.20
K-means Algorithm  (0) 2015.11.25

STEP1. Initial prediction 설정 (log odds & logistic 함수사용, feat. sigmoid)

  • 왜 logistic regression에서 sigmoid 함수를 사용하는가?

  • odds 란 무엇이며, sigmoid 함수와 어떤 관계가 있는가?

  • 이 링크에 모든 것이 설명되어 있다.

  • 위 링크의 내용을 이해하면 주어진 데이터로부터 아래의 초기 prediction 값을 계산하는 과정을 이해할 수 있음.

  • initial prediction = logit(log(p(Positive) / p(Negative)))

STEP2. Residuals 계산

  • prediction 결과와 실제 값과의 차이를 구하는 것.

  • 다음에 생성될 tree의 목표 예측 값으로 사용됨.

  • 첫 트리에서는 pos/neg sample 의 residual 값이 각각 같은 값으로 설정되지만 두번째 트리부터는 달라짐.

STEP3. Tree 생성

Tree 의 Leaf node 에서의 probability 값 계산 (** 주의 ** regression용 트리에서의 수식은 다름)

  1. 먼저 output 값을 구한다. 여기서 output 값은 log(odds) 값을 구할때 사용되는 값임.

    • output = Sum(all residuals on the leaf node) / Sum ((이전트리 예측치) * (1-이전트리 예측치))
  2. log(odds) 값 구하기

    • log(odds) = init_prob + learning_rate * (output value) (트리가 하나인 경우, 두개인 경우. 뒷 항이 트리의 갯수만큼 붙음
  3. probability 값 구하기 (최종 예측값)

    • logistic function을 이용하여 log(odds) 값을 probability로 변경함. 관련 내용은 위의 링크에서 확인 가능함.

변수 선택의 기준

- Gradient Boos 의 설명에서 생략 되어 있고 XG boost 에서만 설명이 나와있는데 같을 것으로 생각됨. XG Boost 포스팅에서 설명

'기계학습' 카테고리의 다른 글

Optimizer 종류  (0) 2022.01.01
GCN (Graph Convolution Network)  (0) 2021.12.29
[정리노트] XGBoost 이해하기 (Regression)  (0) 2020.08.25
K-means Algorithm  (0) 2015.11.25

https://spark.apache.org/docs/latest/quick-start.html

 

Quick Start - Spark 2.4.5 Documentation

Quick Start This tutorial provides a quick introduction to using Spark. We will first introduce the API through Spark’s interactive shell (in Python or Scala), then show how to write applications in Java, Scala, and Python. To follow along with this guide,

spark.apache.org

위 페이지에 있는 'Quick Start' tutorial을 따라하다가 생긴 이슈 사항에 대해 정리.

  •  설치
    • 내 환경 : MacOS 
    • 설치목록
      • Spark
      • sbt
        • sbt란?
          • simple build tool의 약자로 그냥 일반 빌드 툴인듯 하나 scala 를 빌드하기 위한 기능이 잘 제공되고 있는듯하다. 
        • 이 튜토리얼에서 .scala 파일을 빌드하기 위해 이 툴을 사용하므로 일단 설치.
    • 설치팁
      • spark, sbt 의 tgz 파일을 각각 다운 받는다. 
      • 해당 파일의 압축을 푼다. ( tar -xvzf ".tgz 파일명")
      • SPARK_HOME, SBT_HOME 을 환경변수로 등록하고
      • PATH 환경변수에 SPARK_HOME/bin SBT_HOME/bin을 추가한다.
        • .bach_profile 에 설정하는 방법을 인터넷에서 찾아볼것.
      • 참고) brew 나 이런걸로 설치되면 나중에 지우고 할때 개운치 못한 느낌이 들어서 홈디렉토리 아래 util 폴더를 생성하고 그 아래 모든 설치를 진행함... 나중에 지우기 편하게...
      • JDK는 이미 설치되어 있었음.
  • scala에 대해 알게된 것들 (함수등의 기능)
    • map
    • flatMap
    • collect
    • reduce
    • count
    • java 와 동일한 import 방식 (* ==> _  로 바뀐것만 빼고)
    • cache (뭐 내가 쓸랑가 싶지만...)
    • groupByKey  
      • groupByKey(identity) 에서 identity가 도통 뭔지.... 위에 선언도 안되어 있고 예약어 느낌도 아님.
  • Spark Application 생성 
    • object 가 main 함수를 가져야함.
    • SparkSession 을 명시적으로 생성해줘야함 (spark-shell에서는 이미 지정되어있음.)
  • SBT build
    • build.sbt 파일 필요 (폴더 최상위 위치)
    • src/main/scala 폴더 아래에 스칼라 파일 위치 (sbt에서 요구하는 폴더구조가 있는 듯.)
    • build.sbt 작성시, scala 와 spark 버젼을 넣어줘야 하는데 실제 설치된것과 다른 버젼을 적었더니 실패함.
      • spark 버젼 확인 : sc.version
      • scala 버젼 확인 : util.Properties.versionString

Next

  • spark 2.0부터 RDD 기반 방식이 아닌 DataSet 기반 동작을 추천함. 성능도 더 좋다고 함. 
  • RDD  guideline은 건너띄고 DataSet 가이드로 고고!

+ Recent posts