KNOU STUDYREAD

한국방송통신대학교 통계데이터과학과 블로그

CS & Department of Statistics and Data Science

통계데이터과학과 및 컴퓨터과학 독서

6-6. 통계적 머신러닝

Harryㅤ 2025. 6. 16.
# 오버피팅(과적합)정규화

seed <- 400820
predictors <- data.matrix(loan_data[,-which(names(loan_data) %in% 'outcome')])
label <- as.numeric(loan_data$outcome)-1
test_idx <- sample(nrow(loan_data), 10000)

xgb_default <- xgboost(data=predictors[-test_idx,], label=label[-test_idx],
                       objective='binary:logistic', nrounds=250, verbose=0,
                       eval_metric='error')
pred_default <- predict(xgb_default, predictors[test_idx,])
error_default <- abs(label[test_idx] - pred_default) > 0.5
xgb_default$evaluation_log[250,]
mean(error_default)

xgb_penalty <- xgboost(data=predictors[-test_idx,], label=label[-test_idx],
                       params=list(eta=.1, subsample=.63, lambda=1000),
                       objective='binary:logistic', nrounds=250, verbose=0,
                       eval_metric='error')
pred_penalty <- predict(xgb_penalty, predictors[test_idx,])
error_penalty <- abs(label[test_idx] - pred_penalty) > 0.5
xgb_penalty$evaluation_log[250,]
mean(error_penalty)

# R에서 제공하는 predict 함수를 통해 파라미터 설정
error_default <- rep(0, 250)
error_penalty <- rep(0, 250)
for(i in 1:250) {
  pred_default <- predict(xgb_default, predictors[test_idx,], iterationrange=c(1, i))
  error_default[i] <- mean(abs(label[test_idx] - pred_default) > 0.5)
  pred_penalty <- predict(xgb_penalty, predictors[test_idx,], iterationrange=c(1, i))
  error_penalty[i] <- mean(abs(label[test_idx] - pred_penalty) > 0.5)
}

# 오차율 시각화
errors <- rbind(xgb_default$evaluation_log,
                xgb_penalty$evaluation_log,
                data.frame(iter=1:250, train_error=error_default),
                data.frame(iter=1:250, train_error=error_penalty))
errors$type <- rep(c('default train', 'penalty train',
                     'default test', 'penalty test'), rep(250, 4))

graph <- ggplot(errors, aes(x=iter, y=train_error, group=type)) +
  geom_line(aes(linetype=type, color=type), size=1) +
  scale_linetype_manual(values=c('solid', 'dashed', 'dotted', 'longdash')) +
  theme_bw() +
  theme(legend.key.width = unit(1.5,"cm")) +
  labs(x="Iterations", y="Error") +
  guides(color = guide_legend(override.aes = list(size=1)))
graph

 
부스팅 : 모델을 앙상블 형태로 만드는 기법이며 이전 모델의 오차를 줄여나가는 방식으로 진행

앙상블 부스팅 아다부스트 그레디언트 부스팅 확률적 그레디언트 부스팅 정규화 하이퍼파라미터
여러 모델의 집합을 이용해 예측한 결과를 생성하는 것 연속된 라운딩마다 잔차가 큰 쪽에 가중치를 두고 일련 모델을 생성하는 기법 변형된 부스팅 알고리즘이며 일반적으로 널리 사용

변형된 부스팅 알고리즘이며 일반적으로 널리 사용 변형된 부스팅 알고리즘이며 일반적으로 널리 사용 비용함수 모델의 파라미터 개수에 벌점항을 추가해 오버피팅 문제를 해결하는 것 알고리즘 피팅 전 사전 세팅해야하는 파라미터

* 부스팅 방법을 사용할 때 오버피팅 문제가 발생하므로 이를 방지하기 위해 설정하는 파라미터
* 여러 하이퍼파라미터 조합 가능. 이때 교차타당성 검사를 사용

아다부스트 알고리즘 진행과정

  • 이전 단계의 결과를 활용해 다음 단계의 학습시 사용될 데이터에 가중치를 부여해 반복되는 학습에 변화 제공
  • 이전 단계에서 분류된 데이터들 중 오분류가 가장 큰 데이터에 가중치를 부여 -> 적은 오분류율이 되도록 하여 이를 다음 판단에 중요한 역할을 하게 함 -> 학습 진행시 집중 극대화 -> 이는 오차가 적을수록 큰 가중치를 갖게 됨
  •  

 

아다부스트 그레디언트 부스팅 확률적 그레디언트 부스팅
이전 단계 결과에서 다음 단계에 사용될 데이터에 가중치 부여 가중치 부여 대신 유사잔차를 학습 데이터와 예측변수를 샘플링

* 이 방식을 재현한 것 중 가장 많이 사용되는 것은 XG 부스팅 방식이 있음



* 그레디언트 부스팅은 아다부스팅과 동일하지만 가중치를 조정하는 대신 모델이 유사잔차를 학습해(잔차가 더 클수록 집중 극대화) 시행.
* 확률적 그레디언트 부스팅은 랜덤 포레스트 방식과 비슷하며 매학습단계마다 데이터,예측변수를 *샘플링하는 방식으로 진행
 

'통계데이터과학과 및 컴퓨터과학 독서' 카테고리의 다른 글

7-1. 비지도 학습  (0) 2025.06.23
6-5. 통계적 머신러닝  (0) 2025.06.09
6-3. 통계적 머신러닝  (0) 2025.05.26
6-2. 통계적 머신러닝  (0) 2025.05.19
6-1. 통계적 머신러닝  (0) 2025.05.12