
지금까지 머신러닝 모델의 하이퍼 파라미터 튜닝을 위해 사이킷런의 GridSearch() 메서드를 이용했습니다. 해당 메서드의 주요 단점은, 튜닝할 파라미터의 개수가 많아지거나 값의 범위가 넓을수록 최적화 수행 시간이 기하급수적으로 길어진다는 점입니다. 그라디언트 기반 앙상블 알고리즘은 성능이 매우 뛰어나지만, 하이퍼 파라미터의 개수가 많으므로 GridSearch() 메서드를 이용한 튜닝이 현실적으로 어려울 수 있습니다. 때문에 실무 및 Competition과 같은 상황에선 GridSearch 방식보다는 베이지안 최적화 기법을 이용해 하이퍼 파라미터 튜닝을 하곤 합니다. 베이지안 최적화는 블랙박스 형태의 목적 함수의 최대 또는 최소 값을 도출하는 입력값을 가능한 적은 시도를 통해 빠르고 효과적으로 찾아줍니..

LightGBM은 XGBoost와 함께 부스팅 계열 알고리즘에서 각광받고 있습니다. XGBoost가 아무리 GBM에 비해 학습 시간이 짧다고 해도, 여전히 랜덤 포레스트와 같은 알고리즘에 비하면 학습 시간이 너무 깁니다. 특히 하이퍼 파라미터 최적화를 위해선 더 긴 시간이 필요합니다. 또한 멀티 코어의 CPU 시스템이 있어야 학습 시간 단축을 체감할 수 있습니다. LightGBM의 가장 큰 장점은 XGBoost보다 학습 시간이 더 짧고, 메모리 소요량도 훨씬 적다는 점입니다. "Light"의 의미가 상대적인 기능 부족 및 예측 성능 부족으로 받아들여질 수 있는데, 절대 그렇지 않습니다. 예측 성능은 XGBoost와 비슷하며 기능은 오히려 LightGBM이 더 풍부합니다. XGBoost와 동일하게 조기 중..

XGBoost는 트리 기반의 앙상블 학습에서 가장 각광받고 있는 알고리즘 중 하나입니다. 압도적인 수치는 아니지만, 분류 태스크에 있어서 일반적으로 다른 머신러닝 알고리즘보다 뛰어난 예측 성능을 보입니다. XGBoost는 GBM에 기반하고 있지만, GBM의 단점인 느린 수행 시간 및 과적합 규제 부재 등의 문제를 어느정도 해결합니다. 특히 병렬 CPU 환경에서 병렬 학습이 가능합니다. 뛰어난 예측 성능 GBM에 비하면 빠른 수행 시간 과적합 규제(Regulalization) 기능 더 이상 긍정 이득이 없는 분할을 가지치기하여 분할 수를 줄이는 Tree pruning 자체 내장된 교차 검증을 통한 조기 중단 기능 결손값 자체 처리 기능 XGBoost의 핵심 라이브러리는 C/C++로 작성되었습니다. XGBo..

부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습하고 예측하면서 잘못 예측한 데이터에 가중치를 부여해 오류를 개선합니다. 부스팅의 대표적인 구현으로 AdaBoost(Adaptive boosting)과 그라디언트 부스트가 있습니다. 에이다 부스트는 오류 데이터에 가중치를 부여하면서 부스팅을 수행합니다. 에이다 부스트의 동작 방식을 알아봅시다. +와 -로 마킹된 피처 데이터 세트가 있다고 합시다. Step 1에서, 첫 번째 학습기가 분류 기준1로 +와 -를 분류합니다. 동그라미로 표시된 데이터는 잘못 분류한 데이터입니다. Step 2에서 잘못 분류한 데이터에 대해 가중치를 부여합니다. Step 3에서 두 번째 학습기가 분류 기준2로 +와 -를 분류합니다. Step 4에서 두 번째 학습기가 잘못 분류..

앙상블 학습(Ensemble Learning)을 통한 분류는 여러 개의 분류기(Classifier)의 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법입니다. 앙상블 학습의 유형은 크게 보팅(Voting), 배깅(Bagging), 부스팅(Boosting)으로 나뉘며, 이 외에도 스태킹 등의 방법이 있습니다. 보팅은 서로 다른 알고리즘의 분류기를 결합 배깅은 같은 알고리즘의 분류기들이 각자 학습 데이터를 샘플링하여 학습한 뒤 보팅을 수행 대표적인 배깅으로는 랜덤 포레스트 알고리즘이 있습니다 위의 그림의 왼쪽이 보팅을, 오른쪽이 배깅을 도식화한 것입니다. 배깅에서 개별 분류기는 원본 학습 데이터에서 샘플링을 한 데이터로 학습을 합니다. 교차 검증이 데이터 세트 간에 중복을 허용하지 않는 것과 다르게..

결정 트리를 이용해 UCI 머신러닝 레포지토리에서 제공하는 사용자 행동 인식 데이터 세트에 대한 예측 분류를 수행해봅시다. 해당 데이터는 30명에게 스마트폰 센서를 부착시킨 뒤 여러 동작과 관련된 피처를 수집한 데이터입니다. 해당 피처를 바탕으로 어떤 동작인지를 예측해봅시다. features.txt 파일에는 각 피처의 인덱스와 이름이 공백을 기준으로 분리되어 있습니다. 해당 파일을 DataFrame 객체로 만들어봅시다. 피처는 총 561개인 것을 확인할 수 있습니다. 또한 피처 이름을 보면 인체의 움직임과 관련된 속성의 평균/표준편차가 X, Y, Z축에 따라 계산된 결과임을 알 수 있습니다. 주의해야 할 점은, 561개의 피처 중 중복되는 피처 이름이 있다는 사실입니다. 이후 피처 데이터 세트(dataf..

분류를 수행하는 다양한 머신러닝 알고리즘이 있습니다(나이브 베이즈, 로지스틱 회귀, 결정 트리, 서포트 벡터 머신, 최소 근접 알고리즘, 신경망, 앙상블 등). 앙상블은 가장 각광을 받는 방법 중 하나입니다. 앙상블은 서로 같거나 다른 알고리즘을 결합하는 것입니다. 이미지, 영상, 음성, NLP 영역에서는 신경망에 기반한 딥러닝이 주류를 이루지만, 정형 데이터 분야에선 앙상블이 매우 높은 예측 성능을 보입니다. 앙상블은 일반적으로 배깅(Bagging)과 부스팅(Boosting) 방식으로 나뉩니다. 대표적인 배깅 알고리즘인 랜덤 포레스트는 준수한 예측 성능과 상대적으로 빠른 수행 시간, 유연성을 갖추어 많은 데이터 분석가들이 애용하는 알고리즘입니다. 하지만 최신 앙상블은 부스팅 방식을 주류로 발전되고 있습..

피마 인디언 당뇨병 데이터 세트를 이용해 당뇨병 여부를 판단하는 분류 모델을 학습시킨 뒤 지금까지 공부한 분류의 평가 지표들로 모델을 평가해봅시다. 피마 인디언 당뇨병 데이터 세트는 북아메리카 피마 지역의 원주민 Type-2 당뇨병 데이터 결과입니다. 데이터 세트는 아래의 피처로 구성돼 있습니다. Pregnancies(임신 횟수), Glucose(포도당 부하 검사 수치), BloddPressure(혈압), SkinThickness(삼두근 뒤 피하지방량), Insulin(혈청 인슐린), BMI(체질량지수), DiabetesPedigreeFunction(당뇨 내력 가중치), Age(나이), Outcome(당뇨 여부, 0/1). 전체 데이터 중 Negative(0)이 500개로 Positive(1)보다 상대적..

머신러닝 모델은 여러 가지 지표로 예측 성능을 평가할 수 있습니다. 성능 평가 지표(Evaluation Metric)은 일반적으로 분류 모델이냐 회귀 모델이냐에 따라 달라집니다. 회귀의 경우 대부분 실제값과 예측값의 오차 평균값에 기반합니다. 회귀의 평가 지표는 복잡하지 않으므로 추후에 알아보겠습니다. 분류 모델의 평가 방법도 일반적으로 정답 레이블과 예측 레이블이 얼마나 정확하고 오류가 적은지에 기반하지만, 단순히 이러한 정확도만 가지고 판단하면 잘못된 평가를 초래할 수 있습니다. 이제부터 분류 모델을 위한 성능 평가 지표를 알아보되, 이진 분류에 포커스를 맞추겠습니다. 이진 분류 모델을 평가할 때는 정확도보다 더 중요시 되는 평가 지표들이 존재합니다. 분류의 평가 지표로는 정확도(Accuracy), ..

캐글에서 제공하는 타이타닉 생존자 데이터로 사이킷런 생존자 예측 모델을 학습하고 평가해봅시다. 타이타닉 생존자 데이터 세트의 피처는 다음과 같습니다. Passengerid, survived(0 : 사망), pclass(1, 2, 3), sex, name, Age, sibsp(동반 형제자매 or 배우자 수), parch(동반 부모님 or 어린이 수), ticket(번호), fare, cabin(선실 번호), embarked(중간 정착 항구) 타이타닉 탑승자 데이터를 판다스 DataFrame 객체로 받아왔습니다. 데이터 세트의 칼럼 타입을 확인해보기 위해, df.info() 메서드를 호출합시다. RangeIndex가 891entries이므로, 총 891개의 로우가 있습니다. 칼럼의 수는 12개이며, 5개의 ..