4주차 ML WIL
ml결정 트리
결정트리는 분류와 회귀 문제에 널리 사용하는 모델
예/아니오 질문을 이어나가며 학습한다
- 노드 : 질문이나 정답을 담은 네모 상자. 맨 위 노드는 루트 노드라 불리고, 마지막 노드는 리프라고도 한다.
- 에지는 질문의 답과 다음 질문을 연결한다.
결정트리 만들기
- 데이터셋 : two_moons 사용
- 결정 트리를 학습한다는 것 -> 정답에 가장 빨리 도달하는 예/아니오 질문 목록을 학습한다는 것
- 머신러닝에서 이런 질문들을 테스트라고 한다.
가장 좋은 테스트를 찾는 과정을 반복해서 모델을 더 정확하게 만들 수 있다.
- 반복된 프로세스는 각 노드가 테스트 하나씩을 가진 이진 결정 트리를 만든다 (True/False)
- 즉 각 테스트는 하나의 축을 따라 데이터를 둘로 나눈다
-
계층적으로 영역을 분할해가는 알고리즘이며 각 테스트는 하나의 특성에 대해서만 이루어지므로 나누어진 영역은 항상 축에 평행
-
데이터를 분할하는 것은 각 분할된 영역이 (결정 트리의 리프) 한 개의 타깃값(하나의 클래스나 회귀 분석 결과)을 가질 때까지 반복!
- 타깃 하나로만 이루어진 리프 노드를 순수 노드라고 한다.
새로운 데이터 포인트에 대한 예측은 주어진 데이터 포인트가 특성을 분할한 영역들 중 어디에 놓이는지를 확인,
그 영역의 타깃 값 중 다수인 것을 예측 결과로 한다.
순수 노드라면 하나!
- 회귀 문제에도 트리 사용 가능
같은 방법으로 새로운 데이터 포인트에 해당되는 리프 노드를 찾고, 찾은 리프 노드의 훈련 데이터 평균값이 이 데이터 포인트의 출력
결정 트리의 복잡도 제어하기
과대적합을 막는 전략
- 사전 가지치기 : 트리의 최대 깊이나 리프의 최대 개수를 제한하거나, 노트가 분할하기 위한 포인트의 최소 개수를 지정
- 사후 가지치기 : 트리를 만든 후 데이터 포인트가 적은 노드를 사용하거나 병합
트리의 특성 중요도
전체 트리를 살펴보는 것 대신, 트리가 어떻게 작동하는지 요약하는 속성을 사용할 수 있음
-
특성 중요도 : 각 특성이 트리를 만드는 결정에 얼마나 중요한지를 평가. 0과 1 사이의 숫자로 1에 가까울 수록 중요한 특성. 특성 중요도의 전체 합은 1.
-
분류 트리와 달리 회귀 결정 트리 DecisionTreeRegressor는 외삽, 즉 훈련 데이터의 범위 밖의 포인트에 대해 예측할 수 없다.
장단점과 매개변수
결정 트리에서 모델 복잡도를 조절하는 매개변수는 사전 가지치기 매개변수 (사이킷런은 사전 가지치기만 지원)
- max_depth, max_leaf_nodes, min_samples_leaf
결정 트리의 장점
- 만들어진 모델을 쉽게 시각화할 수 있음
- 데이터의 스케일의 영향을 받지 않아 특성의 정규화나 표준화 같은 전처리 과정 필요 없음
- 스케일이 서로 다르거나 특성이 혼합되어 있을 때도 잘 작동
주요 단점
- 사전 가지치기를 사용함에도 불구하고 과대적합 되는 경향
결정 트리의 앙상블
앙상블 : 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법
분류와 회귀 모델의 다양한 데이터셋에서 효과적인 모델
–> 랜덤 포레스트와 그레이디언트 부스팅~!!
랜덤 포레스트
- 랜덤 포레스트는 기본적으로 조금씩 다른 여러 결정 트리의 묶음
-
잘 작동하되 서로 다른 방향으로 과대적합된 트리를 많이 만들고, 그 결과를 평균냄으로써 과대적합된 양을 줄일 수 있다.
–> 예측 성능 유지, 과대적합 줄임 - 트리 생성 시 트리들이 달라지도록 무작위성을 주입.
- 트리를 만들 떄 사용하는 데이터 포인트를 무작위로 선택
- 분할 테스트에서 특성을 무작위로 선택
랜덤 포레스트 구축
생성할 트리의 개수를 정한다. - n_estimators 매개변수
각 트리를 완전히 독립적으로 만들기 위해 먼저 데이터의 부트스트랩 샘플을 생성.
(n_samples개의 데이터 포인트 중에서 무작위로 데이터를 n_samples 횟수만큼 반복 추출한다)
특성의 개수는 max_feature 매개변수로 조정 가능
이렇게 만든 데이터셋으로 결정트리를 만듦
- 부트스트랩 샘플링을 통해 랜덤 포레스트의 트리가 조금씩 다른 데이터셋으로 만들어지게 됨
- 각 노드에서 특성의 일부만 사용하기 때문에 트리의 각 분기는 각기 다른 특성의 부분 집합을 사용
–> 랜덤 포레스트의 모든 트리가 서로 달라짐
매개변수 max_features
max_features의 값을 크게 하면 트리들은 매우 비슷해지고 가장 두드러진 특성을 이용해 데이터에 잘 맞춰짐
값을 낮추면 트리들은 많이 달라지고 각 트리는 데이터에 맞추기 위해 깊이가 깊어짐
장단점과 매개변수
- 성능이 매우 뛰어나고 매개변수 튜닝을 많이 하지 않아도 잘 작동하며 데이터의 스케일을 맞출 필요가 없다
- 텍스트 데이터처럼 차원이 높고 희소한 데이터에는 잘 작동하지 않음
- 선형 모델보다 많은 메모리를 사용하며 훈련과 예측이 느림
- 중요 매개변수는 n_estimators, max_features, max_depth같은 사전 가지치기 옵션
- n_estimators는 클수록 좋다.
–> 더 많은 트리를 평균하면 과대적합 줄여 더 안정적인 모델 생성 but 긴 훈련 시간 ㅜㅜ
그래디언트 부스팅 회귀 트리
여러 개의 결정 트리를 묶어 강력한 모델을 만드는 또 다른 앙상블 방법
(회귀와 분류 모두에 사용 가능)
- 이전 트리의 오차를 보완하는 방식으로 순차적으로 트리를 만듦
- 무작위성이 없는 대신 사전 가지치기가 사용됨
- 메모리를 적게 사용하고 예측이 빠른 것이 특징
- 얕은 트리 같은 간단한 모델(약한 학습기)을 많이 연결하는 것이 근본적인 아이디어
- 각각의 트리는 일부 데이터에만 예측을 잘 수행할 수 있어 트리가 많이 추가될수록 성능이 좋아짐
learning rate(학습률) - 학습률이 크면 트리는 오차를 강하게 보정, 복잡한 모델 생성
장단점과 매개변수
- 매개변수를 잘 조절해야한다는 것과 훈련 시간이 길다는 단점이 있음
- 중요 매개변수는 n_estimators(트리의 개수를 지정)와 learning_rate(트리의 오차를 보정하는 정도를 조절)
- n_estimators가 클수록 모델이 복잡해지고 과대적합될 가능성이 높아짐
- learning_rate를 낮추면 비슷한 복잡도의 모델을 많이 만들기 위해 더 많은 트리를 추가해야함 - 뭔 말이지?
- max_depth 또는 max_leaf_nodes (각 트리의 복잡도를 낮춤)
배깅, 엑스트라 트리, 에이다부스트
배깅
Bootstrap aggregating의 줄임말
중복을 허용한 랜덤 샘플링으로 만든 훈련 세트를 사용하여 분류기를 각기 다르게 학습시킴
- 분류기가 predict_proba() 메서드를 지원하는 경우 확률값을 평균하여 예측을 수행함
- 그렇지 않은 분류기에서는 가장 빈도가 높은 클래스 레이블이 예측 결과가 됨
엑스트리 트리
랜덤 포레스트와 비슷하지만 후보 특성을 무작위로 분할한 다음 최저의 분할을 찾음
- DecisionTreeClassifier 사용, 부트스트랩 샘플링은 적용하지 않음
- 무작위성을 증가시키면 모델의 편향 증가, 분산 감소
- 예측 방식: 각 트리가 만든 확률값을 평균함
-
- 일반적으로 랜덤 포레스트가 더 선호된다.
- 엑스트라 트리가 랜덤 포레스트보다 계산 비용이 적지만 무작위 분할 때문에 일반화 성능을 높이려면 많은 드리를 만들어야 함
에이다부스트
Adaptive Boostion의 줄임말
약한 학습기를 사용, 이전의 모델이 잘못 분류한 샘플에 가중치를 높여서 다음 모델을 훈련시킴
- 훈련된 각 모델은 성능에 따라 가중치가 부여됨
- 예측 방식: 모델이 예측한 레이블을 기준으로 모델의 가중치를 합산하여 가장 높은 값을 가진 레이블을 선택!
커널 서포트 벡터 머신
입력 데이터에서 단순한 초평면으로 정의되지 않는 더 복잡한 모델을 만들 수 있도록 확장한 것
선형 모델과 비선형 특성
선형 모델을 유연하게 만드는 방법은 특성끼리 곱하거나 특성을 거듭제곱하는 식으로 새로운 특성을 추가하는 것
커널 기법
실제로 데이터를 확장하지 않고 확장된 특성에 대한 데이터 포인트들의 거리를 계산
- SVM에서 데이터를 고차원 공간에 매핑하는 법
- 원래 특성의 가능한 조합을 지정된 차수까지 모두 계산하는 다항식 커널
-
- 가우시안 커널로도 불리는 RBF 커널
- 차원이 무한한 특성 공간에 매핑하는 것으로 모든 차수의 모든 다항식을 고려함 특성의 중요도는 고차항이 될수록 줄어듦(지수 함수의 테일러 급수 전개 때문 - ???)
SVM 이해하기
일반적으로 두 클래스 사이의 경계에 위치한 훈련 데이터의 일부만 결정 경계를 만드는 데 영향을 준다. 이런 데이터 포인트를 서포트 벡터라고 한다.
새로운 데이터 포인트에 대한 분류 결정은 서포트 벡터까지의 거리에 기반, 서포트 벡터의 중요도는 훈련 과정에서 학습!
SVM 매개변수 튜닝
- gamma 매개변수
- rambda로, 가우시안 커널 폭의 역!수!
- 하나의 훈련 샘플이 미치는 영향의 범위를 결정
- 가우시안 커널의 반경이 클수록 훈련 샘플의 영향 범위도 커짐
- C 매개변수
- 규제 매개변수. 각 포인트의 중요도를 제한함.
- 정리
- gamma 매개변수가 커지면 모델 복잡도 증가
- 작은 C 매개변수는 매우 제약이 큰 모델을 만들고 각 데이터 포인트의 영향력이 작음
- C 매개변수가 커지면 더 복잡한 모델을 만듦
gamma, C 둘 다 값이 커지면 모델이 복잡해지는 거임
SVM을 위한 데이터 전처리
- 모든 특성 값을 평균이 0이고 단위 분산이 되도록 하거나, 0과 1 사이로 맞추는 방법을 많이 사용
- C나 gamma 값을 증가시켜 좀 더 복잡한 모델을 만들 수 있다.
장단점과 매개변수
- SVM은 데이터셋의 특성이 몇 개 안 되더라도 복잡한 결정 경계를 만들 수 있다
- 저차원과 고차원(특성이 적거나 많을 때)에 모두 잘 동작하지만 샘플이 많을 때는 잘 맞지 않음
- 데이터 전처리와 매개변수 설정에 신경을 많이 써야 함
- 분석하기 어려움
- 커널 SVM에서 중요한 매개변수는 규제 매개변수인 C
- RBF 커널은 가우시안 커널 폭의 역수인 gamma 매개변수를 가짐
- C와 gamma 모두 큰 값이 더 복잡한 모델을 만든다
신경망(딥러닝)
다층 퍼셉트론은 복잡한 알고리즘의 출발점이며 비교적 간단하게 분류와 회귀에 쓸 수 있다.
- 피드포워드 신경망 또는 그냥 신경망이라고도 함
신경망 모델
MLP multi-layer perceptron 는 여러 단계를 거쳐 결정을 만들어내는 선형 모델의 일반화된 모습이라고 볼 수 있다
<그림 2-44>의 왼쪽 노드는 입력 특성을 나타내며 연결선은 학습된 계수를 표현하고 오른쪽 노드는 입력의 가중치 합, 즉 출력을 나타낸다
-
MLP에서 가중치 합을 만드는 과정이 여러 번 반복됨
-
계수는 각 입력과 은닉층의 은닉 유닛 사이, 그리고 각 은닉 유닛과 출력 사이마다 있다
신경망 모델을 선형 모델보다 강력하게 만들기 위해 각 은닉 유닛의 가중치 합을 계산한 후 그 결과에 비선형 함수인 렐루나 하이퍼볼릭 탄젠트를 적용한다.
- ReLU는 0 이하를 잘라버리고, tanh 함수는 낮은 입력값에 대해서는 -1로 수렴하고 큰 입력값에 대해서는 +1로 수렴한다.
비선형 함수를 이용하여 신경망이 더 복잡한 함수 학습하게 됨
장단점과 매개변수
- 대량의 데이터에 내재된 정보를 잡아내고 매우 복잡한 모델을 만들 수 있다
- 크고 강력한 모델에서 종종 학습이 오래 걸린다
- 데이터 전처리 과정이 복잡하다
- 신경망의 중요 매개변수는 은닉층의 개수와 각 은닉층의 유닛 수
결정 함수
scikit-learn 분류기에서 불확실성을 추정할 수 있는 함수
- decision_function
- predict_proba()
- 이진 분류에서 decision_function의 반환값의 크기는 (n_samples,)이며 각 샘플이 하나의 실수 값을 반환한다
- decision_function 값의 범위는 데이터와 모델 파라미터에 따라 달라진다
예측 확률
- predict_proba() 출력은 각 클래스에 대한 확률
-
이 값의 크기는 이진 분류에서는 항상 (n_samples, 2)
- 첫 번째 원소 = 첫 번째 클래스의 예측 확률 두 번째 원소 = 두 번째 클래스의 예측 확률
- 확률이므로 항상 0과 1 사이의 값이며 합은 항상 1