728x90
반응형

1. 결정트리(Decision tree)

==> 분류와 회귀 문제에 모두 사용 가능한 모델

 

==> 머신러닝에서 결정 트리는 노드 내 데이터의 불순도를 최소화하는 방향으로 분할 한다.

 

불순도는 한 범주 안에 서로 다른 데이터가 얼마나 섞여 있는지를 나타내는 정도

 

 

1> 엔트로피 

 

==> 불확실한 정도, 한 범주에 데이터가 한 종류만 있다면 엔트로피는 0이된다. 

 

==> 어떤 데이터를 고르든 그 종류를 확실하게 말할 수 있기 때문이다.

 

==> 서로 다른 데이터의 비율이 비등해질수록 엔트로피는 1에 가까워진다.

 

==> 엔트로피 값이 클수록 불순도가 높고, 작을수록 불순도도 낮다.

 

2> 정보 이득

 

==> 결정 트리는 정보 이득을 최대화하는 방향(엔트로피를 최소화 하는 방향)으로 노드를 분할한다.

 

3> 지니 불순도 

 

==> 엔트로피와 유사, 지니 불순도 값이 클수록 불순도도 높고, 작을수록 불순도도 낮다.

 

2. 결정트리 구현(Decision tree)

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer

# 유방암 데이터셋 불러오기
cancer_data = load_breast_cancer()

# 훈련, 테스트 , 데이터로 분리

X_train , X_test, y_train, y_test = train_test_split(cancer_data['data'] , cancer_data['target'] , stratify= cancer_data['target'] , test_size=0.4 , random_state= 42)


decisiontree = DecisionTreeClassifier(random_state= 42) # 결정 트리 정의
decisiontree.fit(X_train , y_train) # 모델 훈련

accuracy = decisiontree.score(X_test , y_test) # 정확도 측정

# 테스트 데이터를 활용하여 결정 트리 모델 정확도 출력

print(f'결정 트리 정확도 : {accuracy : .3f}')

==> 정확도 : 0.930

3. 앙상블 학습

 

==> 문제를 풀 때 한 명이 푸는 것보다 여러 명이 풀어서 서로 비교해보는것이 좋다.

 

==> 다양한 모델이 내린 예측 결과를 결합하는 기법을 앙상블 학습이라고 한다.

 

1> 보팅(Voting)

 

㉠ 하드 보팅(hard voting) : 다수결 투표 방식으로 최종 예측값 정한다.

㉡ 소프트 보팅(soft voting) : 개별 예측 확률들의 평균을 최종 예측확률로 정한다.

 

2> 배깅(bagging) : 봉지(가방 등) 에 담다

 

==> 개별 모델로 예측한 결과를 결합해 최종 예측을 정하는 기법

 

==> 개별 모델이 서로 다른 샘플링 데이터를 활용

 

==> 대표적인 모델 : 랜덤 포레스트

https://knowallworld.tistory.com/376

 

[PYTHON - 머신러닝_랜덤 포레스트]★str.split(expand= True)★K-폴드 교차검증★하이퍼파라미터 튜닝

1. 랜덤 포레스트 ==> 결정 트리의 단점인 오버피팅 문제를 완화시켜주는 발전된 형태의 트리 모델이다. https://knowallworld.tistory.com/375 [PYTHON - 머신러닝_결정트리]★예측력, 설명력★빈칸 제거_skipin

knowallworld.tistory.com

㉠ 전체 훈련 데이터셋에서 무작위 샘플링한 데이터로 개별 모델을 훈련

훈련된 개별 모델로 결과를 예측

㉢ 개별 모델의 수만큼 반복

각 모델이 예측한 값들을 보팅하여 최종 예측값을 구한다.

 

3> 부스팅(boosting) : 복돋우다

 

==> 가중치를 활용해 분류 성능이 약한 모델을 강하게 만드는 기법

 

==> 배깅의 경우 결정 트리 1 과 트리 2가 서로 독립적으로 결과를 예측한 다음 보팅 

 

==> 부스팅은 모델 간 협력이 이루어진다.

 

==> 이전 모델이 잘못 예측한 데이터에 가중치를 부여한다. 다음 모델은 이전 모델이 잘못 예측한 데이터(가중치가 부여된 데이터) 에 더 집중해 훈련한다.

 

EX)

1. '+' 와 '-' 로 구성된 원본 데이터셋

2. 모든 데이터에 동일한 가중치 부여

3. 분류 모델 1로 '+'와 '-'를 분류

4. 분류 모델 1이 잘못 분류한 데이터에 높은 가중치 부여

5. 분류 모델 2는 가중치가 부여된 데이터에 집중해 데이터를 분류

6. 분류 모델 2가 잘못 분류한 데이터에 더욱 높은 가중치 부여

7. 분류 모델 3는 이전 단계에서 가중치가 부여된 데이터에 집중해 데이터를 분류한다.

 

4. 랜덤 포레스트

==> 결정 트리를 배깅 방식으로 결합한 모델

 

==> 나무가 모여 숲을 이루듯 결정 트리가 모여 랜덤 포레스트를 구성한다.

 

==> 결정트리와 마찬가지로 분류, 회귀 문제에 모두 적용가능

 

1.  훈련 데이터셋 ==> 샘플링(복원추출) 훈련 데이터셋 A 생성

https://knowallworld.tistory.com/230

 

복원, 비복원 추출★SET활용하여 차집합,여집합 가능!★기초통계학-[Chapter04 - 경우의 수-03]

1. 복원추출(Replacement) ==> 표본공간에서 표본점을 선택할 때 , 동일한 표본점이 1번이상 반복하여 추출되도록 허용 EX) 1~5까지의 숫자가 적힌 공이 들어 있는 주머니에서 차례대로 2개의 공 꺼내기

knowallworld.tistory.com

==> 복원추출

 

2 . 결정 트리 A는 훈련 데이터셋 A를 활용해 훈련

 

3. 테스트 데이터로 예측해서 스팸일 확률과 일반 메일일 확률 구한다.

 

4. 다른 결정 트리들도 훈련과 예측을 반복

 

==> 각 결정 트리에서 사용하는 데이터는 전체 훈련 데이터에서 각자 샘플링 ==> 각 결정 트리마다 훈련 데이터 샘플이 다르다.

 

5. 각 결정트리로부터 구한 예측 확률의 평균을 구한다.

 

6. 결정 트리를 배깅 방식으로 결합하여 랜덤 포레스트 구성

 

5. 랜덤 포레스트 구현

 

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer

# 유방암 데이터셋 불러오기

cancer_data = load_breast_cancer()

# 훈련, 테스트 데이터로 분리

X_train , X_test , y_train , y_test = train_test_split(cancer_data['data'] , cancer_data['target'] , stratify=cancer_data['target'] , test_size= 0.4 , random_state= 42) # stratify 는 층화 추출

randomforest = RandomForestClassifier(random_state= 42) # 랜덤 포레스트 정의
randomforest.fit(X_train , y_train) # 모델 훈련

accuracy = randomforest.score(X_test , y_test) # 정확도 측정

# 테스트 데이터를 활용하여 랜덤 포레스트 모델 정확도 출력
print(f'랜덤 포레스트 정확도 : {accuracy : .3f}')

랜덤 포레스트 정확도 :  0.939 ==> 결정트리보다 더 높아 졌다.

 

출처 : 머신러닝·딥러닝 문제해결 전략

(Golden Rabbit , 저자 : 신백균)

※혼자 공부용

728x90
반응형

+ Recent posts