키워드
SVM, Decision Tree, 비지도학습
SVM
SVM (선형 이론)
-
각 클래스의 데이터 샘플로부터 거리(마진)가 가장 멀리 위치해있다 → 일반화 성능이 좋다
-
마진을 구성하는 데이터 포인트를 서포트 벡터 라고 함
-
SVM의 경우 마진을 최대화하는 최적 직선(최대 마진 초평면)을 만드는 것이 목적임
-
최적화 문제
- 평행한 두 직선 위에 서포트 벡터가 존재
- 서포트 벡터에 대해 |w^Tx+b|
- 마진 = 2/||w||
-
최적화 문제 2
-
SVM 종류
- 하드 마진 svm
- 어떠한 오분류도 허용하지 않고 완벽한 선형 모델로 분리가 가능
- 소프트 마진 svm
- 데이터가 섞인 경우 완벽한 선형 분리가 불가능함
- 어느정도의 오분류를 허용하면서 오차 발생에 따른 패널티를 비용함수에 부과
- 하드마진 svm 최적화 과정에 규제 패널티를 도입해 일반화 성능을 올림
-
슬랙 변수
- 소프트 마진 svm에서 사용하는 개념. 각 데이터 포인트 당 하나의 슬랙변수가 할당
- 마진을 얼마나 위반하는지를 수치적으로 나타냄
- 슬랙변수를 최소화하고자 함 → 규제로 사용, 규제의 정도를 정해주기 위해 c라는 하이퍼 파라미터를 사용
![](https://velog.velcdn.com/images/jerry_bak/post/9b14d37e-264b-4a2a-a9ac-baa47df0081e/image.png)
- 마진을 위반하지 않은 데이터, 슬랙변수=0
- 마진을 위반한 데이터
- 마진 경계~결정 경계: 0<슬랙변수<1
- 결정 경계 이후: 1<슬랙변수 → 올바르지 못한 클래스로 분류됨
- 1-슬랙변수: 결정 경계에서 슬랙변수만큼 벗어날 수 있음을 허용하는 과정
선형 실습
SVC(kernel='linear', C=0.1)
- C의 값이 크면 경계를 위반하는 것을 허용하지 않는 것이고, C값이 작으면 어느정도의 위반을 허용하는 것이다.
- C에 따라서 슬랙 변수 크기도 달라짐
- C가 커지면 경계를 위반한 것에 대해 강한 패널티 적용, 결정 경계와 마진 경계 사이 거리가 좁아짐
SVM (비선형)
SVR (Support Vector Regression)
- 회귀 문제로 확장한 SVM 방법
- 주어진 데이터에서 가능한 많은 데이터 포인트를 포함하는 마진 구역(엡실론(허용 오차) 내부의 구역)을 설정
Decision Tree
- 데이터를 나누기 위한 조건은 다양함. 어떤 조건을 선택하냐에 따라 분류 속도가 달라질 수 있음
용어
- 노드: 데이터에 대한 특정 질문이나 조건. 데이터 분류 과정에서 사용
- 루트 노드: 트리 가장 상단에 위치한 노드
- 분할 노드(=결정 노드): 데이터를 더 작은 하위 집합으로 나누는 데 사용되는 중간 노드
- 리프 노드(=터미널 노드): 트리 말단에 위치한 노드. 자식 노드가 없음
- 엣지: 노드와 노드 연결 선
분류 Decision tree
-
데이터 분할하는 기준을 결정하는 데 사용되는 방법론
-
엔트로피: 어떤 상황이나 현상이 품고있는 불확실성 (포함하는 정보량과 반비례)
![](https://velog.velcdn.com/images/jerry_bak/post/b405157f-1217-4140-b4e8-9f8d81093aa8/image.png)
- 불확실성이 높은 상황일수록, 다양한 사건의 발생 확률이 균일
- 결정 트리 관점에서 본다면, 각 노드에 포함되는 데이터의 순도(클래스)에 따라 엔트로피가 계산될 수 있음
- 순도가 높아지도록(엔트로피가 낮아지도록) 트리 구성
- 부모 노드와 자식 노드들의 엔트로피를 계산해, 엔트로피가 낮아지는 방향으로 결정 경계를 선정! → 정보 이득 (최대화)
-
지니 불순도: 데이터의 클래스 분포의 불균형을 평가하는 방법 (순도를 측정하는 또다른 방법)
-
0~1의 값을 가짐 → 0: 순도가 높은 상태
![](https://velog.velcdn.com/images/jerry_bak/post/e6661061-8e4b-42a1-acb7-2c9a6a72e4df/image.png)
-
즉 하나의 클래스로만 구성되어있다면(순도가 높다면) p^2의 sum이 1이 되어 지니 불순도가 0이 됨(불균형이 없다는 것을 의미 → 순도가 높음을 의미)
-
마찬가지로 순도가 높아지도록(지니 불순도가 낮아지도록) 트리를 구성
DecisionTreeClassifier(criterion='entropy',
max_depth=3,
min_sample_split=3)
회귀 Decision tree
실습
SVM 학습 시간은 선형 모델에 비해 오래 걸림
Decision Tree는 SVM에 비해 짧음
- 성능 평가 지표
- 정확도 (accuracy)
- 전체 중 얼마나 정답을 맞췄는지 (TP+TN/all)
- 정밀도 (precision)
- 예측한 양성 결과 중 실제로 얼마나 진짜 양성인지 (TP / TP+FP)
- ex) 스팸 메일 중 100% 스팸 메일만 분류해내는 게 중요
- 재현율 (recall)
- 실제 양성 중 얼마나 양성을 찾아냈는지 (TP / TP+FN)
- ex) 암의 경우, 100% 암이 아니더라도 골라내는 게 중요
- 정밀도와 재현율은 trade-off 관계에 있음
- f1 score
- 재현율과 정밀도의 조화 평균
- 둘 다 적당히 좋은 값을 가져야 높은 f1 score를 가질 수 있음
- learning curve
- 모델의 크기가 커지고 복잡도가 증가하면 모델의 성능은 올라감
- 하지만 과적합이 발생하면 오히려 성능 하락 → 학습 데이터에 대한 성능은 지속적으로 상승하지만, 평가 데이터에 대한 성능이 하락
- 평가 데이터에 대한 성능이 낮아지기 시작하는 지점의 세팅을 이용해 모델을 최적화해야함
- Decision Tree에서 max_depth를 변경해 실험해보며 러닝 커브를 그려보고 적합한 max_depth를 찾음 → 더 높은 성능을 보임
- SVM도 C 상수값을 변경해보거나, 커널을 변경해봄으로써 최적화해볼 수 있음
비지도학습
비지도 학습 (un-supervised learning)
-
정답 레이블이 지정되지 않은 데이터로부터 패턴을 찾아내는 학습 방법론
-
라벨링 할 필요가 없어 비용과 시간이 절약
-
데이터 내부의 구조를 탐색하기때문에 다양한 통찰이 도출될 수 있음
-
but, 결과를 해석하기 어려울 수 있음
-
명확한 정답이 없어 모델의 성능 객관화와 평가가 어려움
-
노이즈에 매우 민감함
-
군집화 (Clustering)
- 데이터를 유사한 특성(내재된 구조)을 가진 하위 그룹으로 분할
- 군집화 한 데이터의 의미는 사람이 부여해야함!! → 전문가가 투입돼야함
-
차원 축소 (Dimensionality Reduction)
- 고차원 데이터를 핵심적인 특성을 유지하면서 특성(컬럼)을 줄여 더 낮은 차원의 표현으로 만드는 과정
- 데이터 시각화, 노이즈 감소, 데이터 해석 등을 목적으로 함
-
이상 탐지
- 데이터에서 비정상적인 패턴, 예외적 사례를 탐지
- 일반적인 특성에서 많이 벗어난 데이터를 식별하는 과정에 사용 → 보안, 금융, 의료 분야에서 중요한 역할
비지도학습 대표 알고리즘
- 군집화
- K-means
- 데이터를 K개의 클러스터로 그룹화 → 각 클러스터의 중심을 계산하고 각 데이터 포인트를 가장 가까운 클러스터 중심에 할당 (반복을 통해 중심을 업데이트하며 최적화)
- 계층적 군집화
- 데이터 포인트를 개별 클러스터로 가정해 시작 → 점차 병합, 세분화
- DBSCAN
- 데이터가 모여있는 밀도를 기반으로 클러스터 형성. 너무 저밀도면 이상치로 분류
- 차원 축소
- 주성분 분석 (PCA)
- 데이터의 분산을 최대한 보존하는 방향의 축을 찾아 해당 축을 기준으로 고차원 데이터를 저차원으로 변환
- t-SNE
- 고차원 데이터의 구조적 특성을 보존하면서 저차원으로 매핑
- 이를 이용해 시각화를 많이 함
- 오토 인코더 (Autoencoder: encoder+decoder)
- 딥러닝을 이용한 차원 축소 기법 → 입력 데이터를 저차원으로 압축 후 다시 원래 차원으로 복원하는 방식으로 핵심 특징을 만들어냄
- 이상 탐지
- Isolation Forest
- tree를 기반으로 특정 데이터 포인트를 격리시키는 데 필요한 분할 수를 기준으로 이상치를 탐지 (떨어져있는 데이터의 경우 분할수가 작음)
- One-class SVM
- 정상 데이터만을 이용해 SVM을 학습 → 이상치를 받으면 output 점수가 낮음 → 이상치 탐지
- LOF (Local Outlier Factor)
- 주어진 데이터 주변의 데이터 밀도를 계산 (밀도가 낮으면 이상치!)