SVM (support vector machine)
- 지도학습 기반 머신러닝 모델로, 주로 분류(Classification) 문제에서 사용
- 학습 데이터를 바탕으로 **최적의 결정 경계(Decision Boundary)**를 찾는 것이 목표

가운데 선을 ⇒ 경계 백터
경계선 부근에 데이터가 들어오면 예측률 감소
결정 경계와 초평면 (Hyperplane)
- 결정 경계(Decision Boundary): 각 클래스를 나누는 기준선 또는 초평면.
- 2차원에서는 선(line), 3차원 이상에서는 초평면(hyperplane)


마진(Margin) & 최대 마진 원칙

- 마진(Margin): 초평면과 가장 가까운 학습 데이터 간의 거리.
- SVM은 이 마진을 최대화 하는 결정 경계를 찾는 알고리즘
- 클래스 간 차이를 가장 크게 벌려서(간격을 넓혀서) 일반화 성능을 높이는 분류 기준을 찾는 것
파라미터C
- SVM에서 이상치(outlier)를 얼마나 허용할지를 결정하는 파라미터
- 분류 오류를 허용할 것인가 vs 마진을 넓힐 것인가의 균형을 조절
- C 값의 의미
- C ↑ → 오분류에 큰 벌점
- 이상치도 정확히 분류하려고 시도
- 결정 경계가 이상치 방향으로 과하게 휘어짐
- 마진이 좁아짐
- 과적합(overfitting) 발생 가능
- C ↓ → 오분류에 작은 벌점
- 일부 이상치의 오분류를 감수
- 다수 데이터 기준으로 경계 형성
- 마진이 넓어짐
- 일반화 성능 향상
- C ↑ → 오분류에 큰 벌점
커널
왜 커널이 필요한가?
- 현실 데이터는 **선형 분리(linear separable)**가 안 되는 경우가 대부분
- 단순 직선으로는 클래스 분리가 불가능
- 데이터를 고차원 공간으로 변환 → 그 공간에서는 선형 분리가 가능

- SVM은 커널 함수를 사용하여, 선형 분리가 불가능한 데이터를 고차원 공간으로 매핑함으로써 비선형 분류 문제를 선형 분류 문제로 변환
- RBF 커널은 각 데이터 포인트를 가우시안 함수의 중심으로 하는 고차원 공간으로 데이터를 사상하여, 가까운 점은 크게, 먼 점은 작게 반영
SVM(support vector machine)
- SVM은 마진(margin)을 최대화하는 분류기
- 두 클래스(0 / 1)를 나누는 결정 경계(decision boundary) 를 찾는 것이 목표
- 결정 경계와 가장 가까운 데이터들만이 중요 → Support Vector
- 결정 경계로부터 가장 가까운 데이터(지지 벡터)까지의 거리 = 마진을 최대화
| x0 | x1 | label |
| 2.6 | 35.6 | 0 |
| 1 |
- 모든 입력은 숫자형이어야 함 (2.6, 35.6)
- 서로 스케일이 다른 변수 존재 시 → 정규화(Scaling) 필수
- x0 (2.6)과 x1 (35.6)은 스케일 차이가 큼→StandardScaler / MinMaxScaler 필요
- → 그대로 쓰면 x1이 모델에 과도한 영향
- x0과 x1이 어떻게 label(0,1) 값이 되는지 연산=식을 궁금해하는 것
- 식 = 각 값의 관계
- SVM은 다음 결정 함수로 분류함:
- f(x)=w⋅x+b
- f(x)=w⋅x+b
- w : 가중치 벡터
- x : 입력 벡터 (x0, x1)
- b : 절편
- 분류 기준
- f(x)≥0→ class 1
- f(x)<0→ class 0
오차를 최대한 줄일 수 있게 해주는 분류기 발견
귀무가설, 대립 가설을 만족하는 끝자락들 → 경계에 가까운 데이터 만을
지지벡터를 svm의 목표로 한다 →x
결정 경계를 정의하는 데이터가 지지 벡터이다
마진
- 결정 경계 ↔ 지지 벡터 사이의 거리
- 최댓값을 찾는데
- 이때 조화평균 사용 (아니라는데? 확인필요)
- 이 거리를 최대화하는 것이 SVM의 본질
선형 SVM
- 2차원 데이터 → 직선
- 3차원 데이터 → 평면
- n차원 → 초평면(hyperplane)
경계벡터를 찾는다 → o
경계에서 지지까지의 최대값 = 조화평균
2차원이라면 경계모데
비선형적인 데이터의 분포도 분석 가능
커널 함수의 여부 (지정가능 )
커널함수
- 고차원 매핑 정보로 바뀌면 → 위아래 고도 차이가 생김 ⇒ 초평면 생성 됨
- 입력 데이터를 고차원 특징 공간으로 매핑
- 위아래 “고도 차이”가 생김 → 초평면 생성
- 2차원 → 3차원 : 저차원 → 고차원 : 커널함수를 통해 변환
- 종류 ( 저차원 데이터 → 고차원 데이터로 변환해 주는 역할)
- 선형 커널 : 데이터를 전혀 변환하지 않음
- 시그모이드 커널 : 활성 함수를 사용한 신겨망과 유사
- 가우시안 rbf커널 : 다양한 데이터의 형태에 잘 적용되기 때문에 많은 학습 테스크에 이용
커널 트릭
: 주어진 데이터를 적절한 고차원으로 옮긴 뒤 (내적값은 유지되게 변환) 변환된 차원에서 서포트 벡터 머신을 사용해 초평면을 찾는 것
저차원에서 찾을 수 없었던 선형모델을 고차원에서 찾아내라 !!
- 2차원 (x, y) → 분리 불가
- 커널 함수 적용 → 3차원 (x, y, z)
- 고차원 공간에서는 선형 분리 가능
- ⇒ 커널 함수로 내적만 계산 (트릭)
- n차원까지 트릭
연산
- 같은 층에서 연산 → 덧셈 (선형)
- 다른 층으로 이동 → 곱셈/비선형 변환
- 여러 벡터의 관계 → 내적 연산
- 두 위치 벡터 → 하나의 점으로 설명
- 차원 확장:
- 2D → 3D
- 저차원 → 고차원
- n차원까지 확장 가능
파라미터
- cost(c) :
- c는 얼마나 많은 데이터 샘플이 다른 클래스에 놓이는 것을 허용하는 지를 결정함
- c 값을 낮게 설정하면 이상치들이 있을 가능성을 크게 잡아(규제가약함) 일반적인 결정 경계를 찾아냄
- 높게 설정하면 반대로 이상치의 존재 가능성을 작게 봐서 좀 더 세심하게 결정 경계를 찾아냄 ⇒ overfitting(과적합) 확률 높아짐
- gamma
- 선형 svm으로는 데이터를 제대로 분류 할 수 없는 상황이 많음
- 이런 경우를 해결하기 위해 제안된 방법
- 비선형적인 데이터를 svm에 넣어서 분류할 수 있게 rbf라는 커널 함수를 사용함
- 감마는 가우시안 함수의 표준 편차와 관련되어 있는데 클수록 작은 표준편차를 갖음
- 결정경계 벡터가 서포트 벡터에 영향을 많이 받게 되어 overfitting되는 경향을 띰


- c값이 커질 수록 overfitting
- gamma가 커질수록 overfitting
- 파란색이 같은 그룹
- 노란색이 다른 그룹
- → 비선형?
- 오른쪽 애들(gamma가 커짐 → 가우시안 폭이 좁아짐) 은 세분화된 조건 ⇒ 과적합
- 밑으로 내려갈수록 (c커짐 → 극단적인… )
- 일반화가 잘 된건 gamma= 10인 경우들
R로 확인해보기
#install.packages("kernlab")
#install.packages("e1071")
library (kernlab)
m=ksvm(Species~., data=iris)
m

idx<-createDataPartition(iris$Species, p=0.7, list=F)#1번부터 150번까지 인덱스 있는데 그중 70프로가 출력
iris_train<-iris[idx, ]
iris_test<-iris[-idx, ] #해당 인덱스 제외한 데이터 -idx
table(iris_train$Species) #균둥 샘플링 -> 층화추출 (150의 70프로 = 105건 -> 층화추출 35건씩 )

m<-ksvm(Species~., data=iris_train, kenel="rgfdot")
m
pred<-predict(m, iris_test, type="response") #예측치
pred
confusionMatrix(pred, iris_test$Species)

- NIR: 학습하지 않고 우연하게 뽑는 확률 = 기대치
- 통계적으로 유의하다 → NIR을 따르지 않는다
- p-value는 낮을수록 좋은거고
- kappa 는 높을수록 좋은거(우연에 대비해서 예측해서 맞은비율이 월등히 높다는 의미)
- sensitivity = recall = 민감도 = 맞는걸 맞는걸로 맞춘거 = 실측치 기준으로 얼만큼 잘 맞추는지
- specificity =특이도 = TN기준 = 아닌 걸 아닌걸로 맞춘거 true인걸 얼마나 잘 맞추냐
- pos pred value = TP기준 = 정밀도 = 해당 종이라고 예측했을 때 예측 기준 얼마나 맞았는지
- balanced accuracy = 정확도 ? 정밀도와 민감도로 조화평균 값으로 좌표를 잡은것
JSON & XML

JSON : javascript and object notation
html → (스타일+data) → html parser
html = 스타일+구조+내용이 하나로 묶여있어서 → 재사용을 위해 모듈화를 만들기에는 비효율적임
JSON : javascript and object notation
html → (스타일+data) → html parser
html = 스타일+구조+내용이 하나로 묶여있어서 → 재사용을 위해 모듈화를 만들기에는 비효율적임
XML
- 정형구조를 데이터로 표현할 때 사용
- <elememt> data </element>
- 대소문자 구분
- 계층 구조 (하나의 트리 = 하나의 문서)
- xml이 json보다 엄격한 자료구조를 보고 있으므로 → 더 안정적
<student>
<sid></sid>
<sname></sname>
<dept></dept>
</student>
JSON
{키: value}
- 기본은 {},
- 여러개의 {}를 쓸 수 있게 []로 배열화
- 키는 무조건 문자열
{
"students":[
{
"id" :1,
"sid":"com2601",
"sname": "홍길동",
"dept" : "컴퓨터공학과"
},
{
"id" :2,
"sid":"mach601",
"sname": "김길동",
"dept" : "기계공학과"
}
]
}'LG DX DATA SCHOOL' 카테고리의 다른 글
| 02/10 ANN (0) | 2026.02.13 |
|---|---|
| 02/09 mnlist (1) | 2026.02.13 |
| 0130 인공신경망 (0) | 2026.01.30 |
| 0129 목요일 추천시스템 (0) | 2026.01.30 |
| 01/27 NLP (0) | 2026.01.27 |