일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 딥러닝
- 정렬
- lgb
- BFS
- dfs
- 실질적 약수
- 정답코드
- 백준
- 코복장
- ps
- 힙 정렬
- 구현
- 모두의 꿈
- 코테
- 파이썬
- 27448
- 17070
- 아니메컵
- 스펨메일 분류
- C
- 샤논 엔트로피
- populating next right pointers in each node
- 코딩테스트
- 코딩
- 다이나믹 프로그래밍
- 2247
- python
- dp
- 부분수열의 합2
- T tree
- Today
- Total
코딩복습장
SVM 본문
모델 분류와 회귀분석을 위해 사용하는 머신이다.
두 카테고리 중 어느 하나에 속한 데이터 집합이 주어졌을 때, 주어진 데이터 집합을 바탕으로 새로운 데이터가 어느 카테고리에 속하는지 판단하는 비확률적 이진 선형 분류모델을 만드는 것을 말한다.
SVM의 목표는 만들어진 분류모델이 데이터가 있는 공간에서 가장 큰 폭을 가진 경계를 찾도록 하는 것이다.
그림으로 봐야 이해할 수 있을 것 같다.
국물이 많고 고춧가루의 양이 많으면 짬뽕 , 반대면 짜장면이라고 하자.
어떤 이는 그 짜장면과 짬뽕사이의 여백이 가장 넓어지면(둘이 가장 떨어져 있으면(=margin최대화)) 그 둘을 가장 잘 분류했다고 생각할 것이다. 이러한 철학을 따라서 SVM은 "여백이 가장 넓어지는 저 빨간 선을 찾는 것"을 목표로 한다.
일단 우리가 최적화해야할 margin의 값을 구하는 과정은 다음과 같다.
ax + by = c라는 수식이 두 이진분류할 데이터를 나눈다고 가정했을 때,
ax + by = c+1 , ax + by = c-1 이 데이터를 나누는 선에서 가장 가까운 데이터까지 선을 평행이동한 것이라고 생각을 해보자. (어짜피 수식을 정리하면 b와 c의 비율에 따라 y절편이 결정되기 때문에 얼마를 더하는지 상관없다.)
ax + by = c 의 수식은 vector의 내적수식으로 나타낼 수 있다.
어떤 벡터와 W벡터를 내적시켜야 항상 동일한 값이 나올까? -> W벡터의 시작점과 동일한 지점에서 시작하여, 그 벡터에 수직한 방향으로 가는 벡터 위로 가는 벡터와 W를 내적시켜야 동일한 값이 나올 것이다.
따라서 마진의 거리는 2/W벡터의 크기로 나타낼 수 있고 이 값을 최대화시키는 것이 목표가 되는 것이다.
Soft Margin SVM
현실에서는 노이즈나 겹치는 데이터가 많기 때문에 일부 오차를 허용하면서 마진을 최적화한다.
커널 트릭 (Kernel Trick)
데이터가 곧게 나눠지지 않는 경우가 있다.
예를 들면 원처럼 퍼져있는 경우이다. 직선으로는 절대 나눌 수가 없어 데이터를 눈에 안보이게 고차원 공간으로 올려서
고차원 공간에서 직선으로 나누는 방식이다.
그런데 고차원 공간으로 직접 계산하면 너무 느리고 복잡하기 때문에 커널트릭을 쓰는 것이다.
커널트릭은 벡터를 고차원으로 올렸을 때의 내적값을 한 줄 수식으로 계산할 수 있게 해주는 방식이다.
따라서 고차원에서 계산한 것 처럼 결과를 얻을 수 있도록 하는 방식
'머신러닝 기초' 카테고리의 다른 글
CatBoost (0) | 2025.05.17 |
---|---|
Lightgbm (0) | 2025.05.17 |
Xgboost (0) | 2025.05.16 |
Gradient Boosting Machines (GBM) (0) | 2025.05.16 |
Adaptive Boosting (Ada Boosting) (0) | 2025.05.16 |