LG DX DATA SCHOOL

02/03 화 02/05 목요일 SVM

getfeelingsfrom 2026. 2. 9. 15:35

SVM (support vector machine)

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

가운데 선을 ⇒ 경계 백터

경계선 부근에 데이터가 들어오면 예측률 감소

결정 경계와 초평면 (Hyperplane)

  • 결정 경계(Decision Boundary): 각 클래스를 나누는 기준선 또는 초평면.
  • 2차원에서는 선(line), 3차원 이상에서는 초평면(hyperplane)

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

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

  • 마진(Margin): 초평면과 가장 가까운 학습 데이터 간의 거리.
  • SVM은 이 마진을 최대화 하는 결정 경계를 찾는 알고리즘
  • 클래스 간 차이를 가장 크게 벌려서(간격을 넓혀서) 일반화 성능을 높이는 분류 기준을 찾는 것

파라미터C

  • SVM에서 이상치(outlier)를 얼마나 허용할지를 결정하는 파라미터
  • 분류 오류를 허용할 것인가 vs 마진을 넓힐 것인가의 균형을 조절
  • C 값의 의미
    • C ↑ → 오분류에 큰 벌점
      • 이상치도 정확히 분류하려고 시도
      • 결정 경계가 이상치 방향으로 과하게 휘어짐
      • 마진이 좁아짐
      • 과적합(overfitting) 발생 가능
    • 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
    👉 x0, x1이 어떤 비율로 label에 영향을 주는지 = w가 결정

오차를 최대한 줄일 수 있게 해주는 분류기 발견

귀무가설, 대립 가설을 만족하는 끝자락들 → 경계에 가까운 데이터 만을

지지벡터를 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