TIL 211003

이슬비·2021년 10월 3일
0

TIL

목록 보기
2/9
post-thumbnail

1. 배깅, 엑스트라 트리, 에이다부스트 (2.3.7)

: scikit-learn이 제공하는 다른 앙상블 알고리즘

1. 배깅 Bagging

: 중복을 허용한 랜덤 샘플링으로 만든 훈련 세트(부트스트랩 샘플)를 사용하여 분류기를 각기 다르게 학습시킴

  • 분류기가 predic_proba() 메서드를 지원 o: 확률값을 평균하여 예측 수행
  • 지원 X: 가장 빈도가 높은 클래스 레이블이 예측 결과가 됨
from sklearn.ensemble import BaggingClassifier

특징

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import BaggingClassifier
bagging = BaggingClassifier(LogisticRegression(), n_estimators=100,
			oob_score=True, n_jobs = -1, random_state =42)
bagging.fit(Xc_train, yc_train)
  • oob_score = true: 부트스트래핑에 포함되지 않은 샘플을 기반으로 훈련된 모델을 평가 (테스트 세트? 같은 거 -> 사실 테스트 세트는 load_breast_cancer datasets에 따로 있음)
    -> oob_score를 통해 테스트 세트의 성능 짐작 가능
  • RandomForestClassifier도 oob_score 지원 (두 모델 모두 기본값 = False)

잠깐 !!!!!!!!

  1. 배깅: 부트스트랩을 여러번 하여, 여러 훈련 세트를 만들고 각각의 훈련 세트에 모델을 적용하여 그 결과의 값을 평균을 냄 -> 분산을 줄이는 기법
    • max_samples 매개변수로 부트스트랩 샘플의 크기 지정 가능
  2. 랜덤포레스트: 배깅의 일종, 배깅과의 차이는 설명변수(특성)도 무작위로 선택
  3. 랜덤포레스트는 DecisionTreeClassifier(splitter='best')를 사용하도록 고정 -> splitter='random'으로 설정하면 무작위로 분할한 후보 노트 중에서 최선의 분할을 찾음
    • Using best, the model if taking the feature with the highest importance
    • Using random, the model if taking the feature randomly but with the same distribution.


2. 엑스트라 트리 Extra-tree

: 랜덤 포레스트와 비슷하지만 후보 특성을 무작위로 분할한 다음 최적의 분할을 찾음

from sklearn.ensemble import ExtraTreesClassifier

특징

  • DecisionTreeClassifier(splitter='random')
  • 부트스트랩 샘플링 X
  • 랜덤 포레스트보다 계산 비용이 적지만 무작위 분할로 일반화 성능을 높이기 위해서는 많은 트리를 만들어야 함 = 랜덤 포레스트를 더 선호하는 이유
  • 특성 중요도는 랜덤 포레스트와 비슷


3. 에이다 부스트 AdaBoost

: 그레이디언트 부스팅처럼 약한 학습기 사용

from sklearn.ensemble import AdaBoostClassifier

특징

  • 그레이디언트 부스팅과의 차이점: 이전의 모델이 잘못 분류한 샘플에 가중치를 높여서 다음 모델을 훈련 시킴
  • 각 모델은 성능에 따라 가중치 부여
  • 예측: 예측한 레이블을 기준으로 모델의 가중치를 합산하여 가장 높은 값을 가진 레이블을 선택
  • 기본값 = DecisionTreeClassifier(max_depth=1) -> depth = 1이기 때문에 각 트리의 결정 경계가 직선 1개



2. 커널 서포트 벡터 머신 (2.3.8)

1. 커널 서포트 벡터 머신 SVM

: 입력 데이터에서 단순한 초평명으로 정의되지 않는 더 복잡한 모델을 만들 수 있도록 확장한 것

선형 모델과 비선형 특성

  1. 선형 모델을 유연하게 만드는 방법: 특성끼리 곱하거나 특성을 거듭제곱함 -> 비선형 특성 추가
X_new = np.hstack([X,X[:, 1:] ** 2)
# **2 를 통해 z차원의 특성을 만듦

이거를 원래 두 개의 특성으로 투영해보면

-> 더 이상 선형이 아님!

커널 기법

: 수학적 기교를 사용해서 새로운 특성을 많이 만들지 않고서도 고차원 분류기를 학습시킬 수 있음
-> 실제로 데이터를 확장하지 않고 확장된 특성에 대한 데이터 포인트들의 거리를 계산함

<서포트 벡터 머신에서 데이터를 고차원 공간에 매핑하는 데 사용하는 방법>
1. 다항식 커널: 원래의 특성을 가능한 조합을 지정된 차수까지 모두 계산
2. RBF 커널 (가우시안 커널): 차원이 무한한 특성 공간에 매핑 (모든 차수의 모든 다항식 고려)

SVM

  1. 학습이 진행되는 동안 SVM은 각 훈련 데이터 포인트가 두 클래스 사이의 결정 경계를 구분하는 데 얼마나 중요한지를 배움
  2. 일반적으로 훈련 데이터의 일부만 결졍 경계를 만드는 데 영향
    -> 서포트 벡터: 두 클래스 사이의 경계에 위한 데이터 포인트
  3. 새로운 데이터 포인트 예측 = 각 서포트 벡터와의 거리를 측정 -> 분류 결정: 서포트 벡터까지의 거리에 기반
  4. 데이터 포인트 사이의 거리: 가우시안 커널에 의해 계산
from sklearn.svm import SVC
X, y = mglearn.tools.make_handcrafted_dataset()
svm = SVC(kernel = 'rbf', C=10, gamma=0.1).fit(X, y)
  • gamma 매개변수: 가우시안 커널 폭의 역수 -> 하나의 훈련 샘플이 미치는 영향의 범위 (작은 값은 넓은 영역)
    가우시안 커널의 반경이 클수록 훈련 샘플의 영향 범위도 커짐
  • C 매개변수: 규제 매개변수 like 선형 모델 -> 각 포인트의 중요도를 제한

장단점

  1. 장점
    • 다양한 데이터셋에서 잘 작동
    • 데이터의 특성이 몇 개 안되더라도 복잡한 결정 경계를 만들 수 있음
  2. 단점
    • 데이터 전처리와 매개변수 설정에 신경을 많이 써야함
      -> 그래서 요즘엔 사람들이 대부분 랜덤 포레스트나 그레이디언트 부스팅 같은 (전처리가 거의 또는 전혀 필요가 없는) 트리 기반 모델을 애플리케이션에 많이 사용



오 이제 뭔가 이해되기 시작하는듯 !! 하다가 SVM 하면서 의욕을 잃었다 ㅎ... 배깅이랑 에이다 부스트, 엑스트라 트리가 랜덤 포레스트, 그레이디언트 부스트랑 꽤나 큰 연관이 있는 것 같으니까 지도학습 끝나면 한 번 싹 정리해야겠다 ~~.. 오늘의 TIL도 ... 무사히... 끝...

profile
정말 알아?

1개의 댓글

comment-user-thumbnail
2021년 10월 3일

열심히 하시네요^^

답글 달기