[혼공단] 4주차_머신러닝 + 딥러닝

Algo rhythm·2024년 1월 25일
0

혼공단

목록 보기
8/13

1. 트리 알고리즘

1.1. 결정 트리

1.1.1. 로지스틱 회귀모델을 활용한 와인 분류

  • 누락된 데이터에 대한 처리 방법
    1. 훈련 데이터, 테스트 데이터의 평균으로 채운다
    2. 누락된 데이터의 샘플 자체를 제거한다

  • 최대/최소, 평균, 4분위값, 편차값을 확인

1.1.2. 결정 트리를 활용한 와인 분류

  • 노드 : 결정 트리를 구성하는 핵심 요소, 훈련 데이터의 특성에 대한 테스트를 표현

1.1.2.1. 결정 트리 이미지

1.1.2.2. 결정 트리 단순화

  • max_depth=1 루트 노드를 제외한 트리 깊이를 1로 지정
  • filled=True 클래스에 맞게 노드 색을 부여
  • feature_names=['alcohol', 'sugar', 'pH'] 특성의 이름 전달
  • 가장 많은 클래스가 예측 클래스가 된다.
  • gini불순도 : criterion 매개변수에 지정한 지니 불순도를 사용함.
  • gini불순도 = 1 - (음성 클래스 비율^2 + 양성 클래스 비율^2)
  • 순수노드 : 불순도 = 0 인 노드
  • 부모노드와 자식노드의 불순도가 크도록 트리를 성장
  • 부모의 불순도 - (좌측 노드 샘플 수 / 부모의 샘플 수) 좌측 노드 불순도 - (우측 노드 샘플 수 / 부모의 샘플 수) 우측 노드 불순도
  • 정보이득 : 부모노드와 자식노드의 불순도 차이
  • 정보이득이 최대치가 되도록 클래스를 분리
  • criterion='entropy' : 엔트로피 불순도로 적용
  • 엔트로피 불순도 식 :
    • 음성 클래스 비율 log2(음성 클래스 비율) - 양성 클래스 비율 log2(양성 클래스 비율)
  • 노드를 순수하게 나눌수록 정보이득은 커진다.
  • 우측 자식 노드의 레드와인과 화이트 와인의 비율이 가장 크다.
  • 현 상태로 결정 트리의 성장이 멈추면 좌우노드 모두 양성클래스로 예측하게된다.(두 노드 모두 양성 클래스의 개수가 많기 때문)

1.1.2.3. 가지치기

  • 무한히 가지를 뻗어나가면 테스트 세트에서 정확성이 크게 떨어진다. 최적의 노드 깊이를 찾아야한다.
  • 특성 값의 스케일이 계산에 영향을 끼치지 않음 -> 전처리 불필요

  • 결정 트리는 전처리 불필요


1.2. 교차 검증 및 그리드 서치

1.2.1. 교차 검증

  • 테스트 세트로 수 차례 검증하다보면 테스트 세트에 분석이 맞춰져서 일반화에 어려움을 겪을 수 있다.
  • 따라서 가능한 테스트 세트를 활용하지 않아야한다.
  • 모델 생성 후 마지막으로 한 번 사용할 것을 권장
  • max_depth 매개변수를 사용한 하이퍼 파라미터 튜닝 필수

1.2.1.1. 검증 세트

  • 또 하나의 훈련 세트를 준비
  • 60%(훈련 세트), 20%(검증 세트), 20%(테스트 세트)
  • 훈련 데이터가 충분한 경우 단 몇 %만 검증 세트로 두기도 한다.

1.2.1.2. 교차검증

  • 검증 세트를 떼어 내어 평가하는 과정을 반복

  • k-폴드 교차 검증(k-겹 교차 검증) : 훈련세트를 k개 부분으로 나누어서 교차 검증을 수행

  • 지정된 수 만큼 훈련 세트에서 데이터를 분할하여 교차 검증 실시

  • fit_time : 모델을 훈련하는 시간 - 리소스 상태에 따라 다름

  • score_time : 모델을 검증하는 시간 - 리소스 상태에 따라 다름

  • cv=StratifiedKFold() 셔플 방법을 지정

  • 기본적으로 회귀모델 - KFold, 분류모델 - StratifiedKFold

  • 교차 검증 요약

  1. 전체 훈련용 데이터를 k의 수로 나누어 세트로 구성한다.
  2. 1 폴드에서 네 번째 훈련 세트가 검증 세트가 되어 훈련 세트의 학습 결과에 대해 평가한다.
  3. 2 폴드에서 세 번째 훈련 세트가 검증 세트가 되어 훈련 세트의 학습 결과에 대해 평가한다. 1 폴드의 검증 세트는 훈련 세트가 되어 학습에 사용된다.
  4. 2, 3처럼 4 폴드까지 모델의 훈련이 반복된다.
  5. 각 폴드에 대한 점수의 평균을 구하고 테스트 세트를 입력하여 모델의 점수와 비교한다.

1.2.2. 그리드 서치

1.2.2.1. 하이퍼파라미터 튜닝

  • 하이퍼파라미터 : 모델이 학습할 수 없어서 사용자가 직접 지정해야하는 매개변수(파라미터)

1.2.2.2. 그리드 서치

  • 하이퍼파라미터의 탐색과 교차검증을 한번에 수행하도록 지원하는 옵션
  • 그리드 서치는 검증 점수가 가장 높은 매개변수의 조합으로 모델을 생성할 수 있다.

1.2.2.3. 랜덤 서치

  • 매개변수 조건이 너무 많거나 매개변수 값의 범위나 간격이 너무 넓을 때 사용
  • 매개변수를 샘플링할 수 있는 확률분포 객체를 전달
  • uniform : 실숫값 추출
  • randint : 정숫값 추출

  • randint
  • uniform
  • 매개변수(파라미터) 값의 범위를 지정 후 매개변수 간의 최적의 조합을 확인
  • 최적의 매개변수 조합으로 학습한 모델의 테스트 결과 확인

1.3. 트리의 앙상블

1.3.1. 앙상블 학습

  • 결정 트리 기반의 알고리즘
  • 정형데이터에 특화
  • 비정형데이터는 신경망 알고리즘
  • 정형 데이터 : 특정 구조로 되어 있는 데이터
  • 비정형 데이터 : 글과 같은 긴 문자의 텍스트 데이터, 이미지, 음향 데이터 등등

1.3.2. 랜덤 포레스트

  • 앙상블 학습의 일종
  • 결정 트리를 랜덤하게 생성하여 결정 트리의 숲을 형성
  • 구성
    • 각 트리를 훈련하기 위한 데이터를 랜덤으로 생성
    • 부트스트랩(데이터 세트의 중복을 허용하는 샘플링 방식) 샘플 활용하여 훈련 세트의 크기가 같도록 구성
  • 랜덤포레스트분류 : 전체 특성의 수의 제곱근수를 골라 결정 트리 훈련 실시
    • 즉, 특성의 수가 4 일 때 4개 중 2개의 특성을 각각 추출하여 결정 트리 모델
    • 총 2개 특성 씩 조합한 모델이 총 6개가 생성됨
    • 각 트리의 클래스 별 확률을 평균하여 가장 높은 확률을 가진 클래스를 예측으로 삼는다.
  • 랜덤포레스트회귀 : 전체 특성을 한번에 사용
    • 각 트리의 예측을 평균한다.
  • 훈련세트의 과대 적합 방지
  • 검증 세트와 테스트 세트의 안정성 향상

1.3.3. 엑스트라 트리

  • 랜덤 포레스트와 대부분 유사
  • 전체 특성 중에 일부 특성을 랜덤하게 선택하여 노드를 분할
  • 부트스트랩 사용X = 전체 훈련 세트 사용
  • 노드 별 특성을 무작위로 분할
    • 성능이 낮아지는 대신 과대 적합 방지
    • 검증 세트의 점수 향상
  • 특성 설정의 무작위성 때문에 랜덤 포레스트보다 더 많은 노드를 생성
  • 빠른 계산 속도가 엑스트라 트리의 장점 - 특성이 많아질수록 최적의 분할을 찾는데 많은 시간을 소모함

1.3.4. 그레이디언트 부스팅

  • 깊이가 얕은 결정트리를 사용하여 트리의 오차를 보완
  • 과대적합에 강하며 일반화 가능성이 높음
  • 경사하강법을 활용한 트리 앙상블 추가
  • 분류 - 로지스틱 손실함수 사용, 회귀 - 평균 제곱 오차 함수 사용
  • 손실함수가 가장 낮은 지점을 찾아가는 방법으로 모델의 가중치와 절편을 조금씩 바꾸어 가며 탐색

1.3.5. 히스토그램 기반 그레이디언트 부스팅

  • 입력 특성을 256 구간으로 나누어 최적의 분할 탐색에 용이
  • 각 특성에 대해서 256개의 구간으로 분리한다. 그리고 누락된 데이터를 그 중 하나의 구간으로 대체하여 모델이 학습한다. 따라서 특성의 누락된 데이터에 대한 전처리가 필요없다.

  • permutation_importance : 특성을 하나씩 랜덤하게 섞어서 모델의 성능이 변화하는지를 관찰
  • 반복하여 얻은 특성의 중요도(importances), 평균(importances_mean), 표준편차(importances_std)를 나타낼 수 있는 함수

1.3.6. 앙상블 학습 요약

  • 랜덤 포레스트 : 결정 트리를 훈련하기 위한 부트스트랩(샘플의 중복을 허용) 샘플을 생성, 전체 특성 중 일부를 랜덤하게 선택하여 결정 트리를 생성
  • 엑스트라 트리 : 부트스트랩으로 샘플을 생성하지 않고 노드를 분할할 때도 최선이 아닌 랜덤으로 분할하여 훈련 속도가 빠르지만 더 많은 트리를 생성함
  • 그레이디언트 부스팅 : 깊이가 얕은 트리를 연속적으로 추가하여 손실함수를 최소화 하는 앙상블 방법, 성능이 뛰어나나 훈련속도가 더딤, 학습률 매개변수를 조정하여 모델의 복잡도 제어 가능
    • 학습률 매개변수가 크면 훈련 세트에 과대적합된 모델을 얻을 수 있음
  • 히스토그램 기반 그리이디언트 부스팅 : 훈련데이터를 256개의 구간으로 분할하여 노드 분할 속도가 매우 빠름.
profile
배운 건 써 먹자

0개의 댓글