빅데이터 부트캠프 23&24일차
앙상블
- 이미 만든 여러 분류기를 연결하여 더 좋은 분류기를 생성하는 방법
Simple Voting
- Hard Voting : 다수의 분류기들 간에 다수결로 최종 클래스를 선정하는 방법
- Soft Voting : 다수의 분류기들이 각각 분류한 확률값들을 기반으로 평균 확률값을 내어서 더 높은 확률값을 갖는 클래스로 최종 선정하는 방법
VotingClassifier
- 개별 모델들을 하나의 분류기 객체에 담아 앙상블 학습을 진행
- Regressor 없이 모두 Classifier만 담아져야함 (Regressor 앙상블은 VotingRegressor)
- 데이터셋 분리(train_test_split) 전에 실행해야함
- from sklearn.ensemble import VotingClassifier
voting_clf = VotingClassifier(estimators=, voting =)
※ VotingClassifier 하이퍼파라미터
- estimators = 앙상블을 진행할 여러 모델들을 튜플 형식으로 입력
ex) estimators = [('지정명', 모델명), ('지정명', 모델명), ...]
- voting = 하드 보팅 혹은 소프트 보팅 설정 (기본값은 hard)
Bagging (Bootstrap Aggregating)
- 원 데이터 집합으로부터 크기가 같은 표본을 여러 번 단순 임의 복원추출하여 각 표본에 대해 분류기(classifiers)를 생성한 후 그 결과를 앙상블하는 방법
RandomForestClassifier
- 대표적인 배깅의 분류 알고리즘 중 하나
- 데이터를 반복 복원추출을 진행할 뿐만 아니라 변수 또한 임의로 추출하여 다양한 모델을 만드는 것
- 공분산을 줄이는 효과를 기대하기 위해 사용
- from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier()
Boosting
- 성능이 약한 변환 모델들을 진행하면서 조금씩 가중치를 부여하며 모델의 성능을 높이는 앙상블 기법
GradientBoostingClassifier
- 경사하강법에 기반하여 부스팅하는 분류 알고리즘
- 순차적으로 분류기들을 학습하기 때문에 학습시간이 상대적으로 오래걸림
- from sklearn.ensemble import GradientBoostingClassifier
XGBClassifier
- 트리 기반의 앙상블 학습에서 각광받는 부스팅 알고리즘
- Gradient Boosting 기반이지만 강력한 병렬 처리로 학습과 처리가 Gradient Boosting보다 빠름
- 예측 성능이 좀 떨어지는 시점에 실행을 종료하여 예측 성능이 뛰어남
- XGBoost 조기중단을 수행하려면 fit() 함수에 조기중단 파라미터 입력해야함
※ XGVClassifier 조기중단 하이퍼파라미터
- early_stopping_rounds = 평가 지표 향상될 수 있도록 반복횟수 정의
- eval_metric = 조기 중단을 위한 평가지표 (logloss-이진 분류시 예측, 정답과의 오차값 계산),
- eval_set = 성능 평가를 수행할 데이터 셋
-> eval_set으로 반복 수행시마다 지정된 데이터 세트에서 eval_metric으로 지정된 평가 지표 함수로 예측 오류 측정
- from xgboost import XGBClassifier
xgb = XGBClassifier()
LGBMClassifier
- 대용량 데이터 처리에 적합하며 XGBoost에서 학습 속도를 업그레이드한 버전이라 XGBoost와 마찬가지로 병렬처리인 GPU를 지원하며 예측 성능도 XGBoost와 차이가 거의 없는 편
- 메모리를 적게 사용하며 현시점에서 가장 빠른 학습 속도의 부스팅 알고리즘
- 데이터 수가 10000건 이하일때는 과적합 문제를 일으킬 가능성이 높은 치명적인 단점이 존재
- import lightgbm
- from lightgbm import LGBMClassifier
lgbm_clf = LGBMClassifier()
PCA(Principal Component Analysis)
- 차원 축소 기법 중 하나로, 원 데이터의 분포를 최대한 보존하면서 고차원 공간의 데이터들을 저차원 공간으로 변환
- 여러 변수간에 존재하는 상관 관계를 이용해 이를 대표하는 주성분을 추출하여 차원을 축소
- 차원 축소시 기존 데이터의 정보 유실이 최소화됨
- PCA는 여러 속성의 값을 연산해야 하므로 속성의 스케일에 영향을 받음
- 여러 속성을 PCA로 압축하기 전에 각 속성값을 동일한 스케일로 변환하는 것이 필요
- 평균이 0, 분산이 1인 표준 정규 분포로 모든 속성값 변환 (StandardScaler)
- n_components = 기존 차원에서 몇차원으로 축소할지 설정 (PCA 하이퍼파라미터)
매니폴드 학습(manifold learning)
- 시각화 알고리즘으로 훨씬 복잡한 매핑을 만들어 더 나은 시각화를 제공 (PCA의 일부 중 하나)
- 그중에서 t-SNE 알고리즘을 주로 사용 (t-Distributed Stochastic Neighbor Embedding)
- from sklearn.manifold import TSNE
tsne = TSNE(random_state=)
tsne.fit_transform()
make_pipeline
- Voting과 유사한 방법이며 입력해준 순서에 따라 앙상블 학습을 진행
- Classifier 끼리만 입력하거나 Regressor 끼리만 입력해야했던 voting과는 달리 Classifier와 Regressor 심지어 VotingClassifier, VotingRegressor, PCA 등 다양한 알고리즘을 입력할 수 있음
K-means 군집화 알고리즘
- 데이터를 K개의 군집(Cluster)으로 묶는(Clusting) 알고리즘
- 레이블(정답)이 주어지지 않았을 때 주어진 데이터를 묶는 비지도학습
- 군집화시에 PCA 적용해서 분류할 경우 신뢰도가 높아짐
- from sklearn.cluster import KMeans