일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 인스톨
- plugin
- 머신러닝
- data visualization
- Data Analysis
- 공간데이터 분석
- 웹지도
- Spatial Data Analysis
- AI
- 데이터 시각화
- install
- 플러그인
- Mapbox
- 데이터 분석
- machine learning
- Uber
- 인공지능
- Big data
- 우버
- mapping
- CARTO
- GIS
- map
- 지도
- QGIS
- Kepler.gl
- 설치
- Web GIS
- Web Mapping
- 빅데이터
- Today
- Total
GIS & Spatial Analysis in KOREA
Support Vector Machine (SVM) - 이론 본문
Support Vector Machine (SVM) - 이론
Borin78 2018. 9. 13. 08:00[Machine Learning]
#Data Analysis #Spatial Data Analysis #Big Data #Data Visualization
#AI #Machine Learning #Supervised Learning #Support Vector Machine #SVM
#데이터 분석 #공간데이터 분석 #빅데이터 #데이터 시각화
#인공지능 #기계학습 #머신러닝 #지도 학습 #서포트 벡터 머신
[ 서포트 벡터 머신 (Support Vector Machine, SVM) - 이론 ]
Support Vector Machine(SVM)은 Vapnik이 제안한 머신러닝 기법으로, 경험적 위험 최소화 원칙을 기반으로 하는 다른 통상적인 머신러닝 기법과는 달리 구조적 위험 최소화를 기반으로하여 일반화 오류의 상한을 최소화 할 수 있는 머신러닝 기법으로 알려져 있다.
SVM의 이론적 설명을 굉장히 복잡하나 그 개념은 매우 단순하다. 각 변수들의 특징에 따라 서로 유사한 그룹을 선으로 구획해 나누는 것이다. 그룹을 나누는 최적의 선을 초평면(Hyperplane)이라 한다.
좀 더 쉽게 설명해보면 아래 그림처럼 데이터들이 그래프에 출력되어 있다. 두 그룹을 나누는 선을 결정 할 수 있을까?
아마 아래 그림처럼 선을 그어 두 그룹을 분할했을 것이다. 선을 기준으로 왼쪽에는 검은 원형 점들이 오른쪽에는 파란색 사각형 점들이 위치한다. 이것이 SVM의 원리이다. 조금 더 복잡해지면 선을 이용해 분할하는 것을 다차원의 공간에서 초평면(Hyperplane)을 이용해 분할한다.
그럼 한 단계 나아가 아래 그림처럼 데이터들이 분포해 있다고 하자. x축-y축 평면에서 두 데이터(검은색 원형 점, 파란색 사각형 점)를 분리 할 수 있는 선은 없다. 여기서 우리는 무엇을 어떻게 할 수 있을까?
이때 우리는 z축이라고 부르는 한 차원을 더 추가해 변형을 시도한다. 이때, w= x^2+ y^2 이며, z축 평면상의 점 값은 가정한다. 이 경우 z-원점으로부터 거리를 임으로 조작 할 수 있다. 이것을 y축(x축)-z축 평면에 표시하면 아래와 같이 나타나며, 이제는 명확하게 선으로 데이터를 분리 할 수 있다.
이 때 그은 선(녹색)을 원본 x축-y축 평면으로 되돌릴 때 아래 그림처럼 연결된 고리 형태로 나타난다. 이러한 변형을 Kernel 이라고 부른다. (감사하게도 이런 데이터에서 매번 변환 방법을 고안할 필요가 없다. 파이썬의 써킷런(sklearn) 라이브러리에 포함되어 있다.)
이번에는 좀 더 나아가 데이터들이 아래 그림처럼 검은 원형 점들이 파란색 사각형 점과 겹치거나 일부 안쪽으로 들어와 있는 경우는 어떻게 해야 할까?
아래 두 그림 중 어떤 선을 그어 데이터를 나눠야 할까?
어느 것을 선택해야 할까? 둘 다 맞는 답인 것 같다. 좌측 그래프는 최소한의 이상치(아웃라이어)를 가지며 우측 그래프는 이상치 없이 완벽하게 구획해 놓았다.
그러나, 여기서 상쇄(Trade off)가 존재한다. 실제 현실에 적용하려면 수백만 개의 학습 데이터 셋에서 완벽한 자료를 찾는데 많은 시간이 걸린다. (이는 코딩 과정에서 확인 할 수 있다.) 이를 정규화 매개 변수(Regularization Parameter) 과정이라고 한다.
이제 정규화 매개 변수(Regularization Parameter)와 감마(Gamma)에 대해 정의해보자. 이 둘은 SVM에서 분류를 조절하는 매개 변수이다. 이를 다양하게 이용한다면 합리적인 시간 내에 정확도를 유지하면서 이해 가능한 비선형 분류 선을 얻을 수 있다. (코딩 연습에서 이들 매개변수를 조정해 SVM의 정확도를 향상시키는 방법에 대해 알아볼 것이다.) 나머지 다른 하나의 변수(Parameter)는 커널(Kernel)이다. 커널은 선형 분리의 선형을 원하는지의 여부를 결정한다.
조절 변수(Tuning Parameter): Kernel, Regularization, Gamma and Margin
1. 커널(Kernel)
Linear SVM에서 초평면(Hyperplane)의 학습은 일부 선형 대수학을 사용하여 문제를 변형함으로써 수행 할 수 있다. 여기서 커널이 역할을 한다. 선형 커널(Linear Kernel)의 경우 input(x)와 support vector(xi) 사이 점선 궤적에 사용되는 새 입력값에 대한 예측 식은 다음과 같다.
f(x) = B(0) + sum(ai*(x, xi))
이 방정식은 학습 데이터에서 모든 Support Vector를 이용해 새로운 input vector(x)의 내부 곱을 계산하는 방정식이다. 계수 B0 및 ai (각 입력에 대한)는 학습 알고리즘에 의해 학습 데이터로부터 추정되어야 한다.
다항 커널(Polynomial Kernel) 식은 다음과 같이 작성되며,
K(x, xi) = 1 + sum(x*xi)^d
혹은,
K(x, xi) = exp(-gamma*sum((x - (xi)^2 ))
와 같이 지수함수로 쓸 수 있다. (Source for this excerpt : http://machinelearningmastery.com/)
다항식(Polynomial) 및 지수형 커널(Exponential Kernel)은 더 높은 차원에서 분리선을 계산한다. 이것을 커널 속임수(Kernel Trick)라고 한다.
2. 정규화(Regularization)
정규화 매개 변수(Regularization Parameter)는 종종 파이썬의 싸이킷런(sklearn) 라이브러리에서 C 매개 변수라고도 불린다. 이 변수는 SVM 최적화에서 얼마나 사용자가 각 학습 예제에서 잘못 분류하는 것을 피하길 원하는지 알려준다.
C 값이 큰 경우, 초평면에 의해 학습 값들이 정확하게 분류되는 작업을 수행하며 최적화는 작은 마진(Margin)의 초평면을 선택합니다. 반대로 C의 값이 작은 경우, 최적화 방법은 많은 점들을 잘못 분류하더라도 더 많은 여백으로 분리 된 초평면을 찾게 된다.
아래 이미지는 두 개의 다른 정규화 매개 변수(Regularization Parameter)의 예이다. 왼쪽 그래프의 C 값이 작기 때문에 잘못된 분류가 있다. 하지만 오른쪽 도표의 경우 C 값이 크며 올바른 결과를 얻을 수 있다.
3. 감마(Gamma)
감마 매개 변수(Gamma Parameter)는 하나의 교육 예제의 영향력이 어디까지인지를 정의한다. 감마 매개 변수 값이 Low한 경우 'Far(먼)'을 의미하고 High한 값의 경우 'Close(가까운)'를 의미한다. 즉, 감마 값이 Low한 경우 그럴듯한 경계선으로부터 멀리 떨어진 점들이 경계선의 계산에서 고려된다. 이와 반대로 감마 값이 High한 경우 그럴듯한 경계선에 가까운 점들이 계산에서 고려된다.
4. 간격(Margin)
마지막으로 SVM 분류에서 가장 중요한 특징은 간격(Margin)이다. SVM은 좋은 간격(Margin)을 얻으려고 한다.
간격(Margin)은 가장 가까운 점들의 계층을 분리하는 선이다.
좋은 간격(Good Margin)은 분리선으로 인해 두 계층 간격이 크게 나타나는 것이다. 아래 이미지는 좋고 나쁜 간격의 사례이다.
다음 글에서는 4개의 Python의 sklearn 라이브러리를 이용해 SVM 분류(SVC라고도 함)를 구현하고, 튜닝 매개 변수(Tuning Parameter)를 조절하는 미니 프로젝트를 진행할 예정이다. 그리고 Naive Bayes Classfier와 결과를 비교할 예정이다.
- 끝 -
'Machine Learning > Machine Learning Basic' 카테고리의 다른 글
Support Vector Machine (SVM) - Code (0) | 2018.09.14 |
---|---|
Naïve Bayes Classification - Code (0) | 2018.08.31 |
Naive Bayes Classification - 이론 (0) | 2018.08.30 |
Machine Learning(기계학습)이란? (0) | 2018.08.29 |