본문 바로가기

수업내용정리/인공지능

[SckitLearn]지도학습 알고리즘(2)_선형 SVM 분류기의 특징과 사용법

이번 시간에는 지도학습 머신러닝 모델 중 하나인 서포트 벡터 머신, 그중에서도 선형 분류기에 대해 알아보자.

그리고 실제 코드로는 어떻게 사용하는지 또한 알아보자.

 

저번 시간에 아래와 같은 설명으로 간략하게 알아보았었다.

 

두 카테고리 중 어느 하나에 속한 데이터의 집합이 주어졌을 때, SVM 알고리즘은 주어진 데이터 집합을 바탕으로 하여 새로운 데이터가 어느 카테고리에 속할지 판단하는 비확률적 이진 선형 분류 모델을 만드는 방식으로 동작합니다.
 

[Tensorflow][Keras]인공지능? 머신러닝? 딥러닝?

요즈음 인공지능이 일상생활 속에도 많이 쓰이면서 쉽게 들을 수 있게 되었습니다. 그래서 인공지능 딥러닝 머신러닝 데이터 분석.. 등등 많은 관련 용어들이 혼용되어 쓰이는데 이에 대해 개념

all4null.tistory.com

하지만 위 설명만 보면 이해하기 어려울 수 있다. 그러니 이번시간에는 쉽게 예제를 들어 알아보자.

 


 

서포트 벡터 머신이란?

SVM은 머신러닝 모델 중 하나이다. 

선형/비선형 분류, 회귀, 이상치 탐색에도 사용할 수 있다.

스케일에 대해 민감한 특징이 있다.

 

SVM을 이해하기 위해선 그림으로 예제를 살펴보는 것이 이해가 쉽다.

한 가지 SVM 선형 분류기 예시를 들어보자.

[그림-1] SVM 선형 분류기

이처럼 기준선을 그어서 작업(분류 혹은 회귀)을 수행하는 것을 SVM의 기본 아이디어라고 이해하면 된다.

 

선형 SVM분류기의 경우, 기준선과 각 클래스 간의 거리(margin)가 가장 크도록 선을 긋는다.

그래서 라지 마진 분류(large margin classification)라고 불린다.

 

위 [그림-1]와 같이 기준선에 의해 모든 샘플들이 분류가 잘 되면 이를 하드 마진 분류(Hard Margin Classification)라고 한다.

하드 마진 분류는 아래[그림-2]와 같이 이상치가 생기면 아래처럼 기준선을 긋지 못하는 현상이 발생할 수 있다.

[그림-2] 이상치가 있는 경우

 

그러므로 모델을 만들 수 없는 상황을 방지하기 위해 소프트 마진 분류(Soft Margin Clssification)를 사용한다.

소프트 마진 분류는 [그림-1]의 SVM 분류기와는 달리 이상치가 있더라도 이를 어느 정도 무시하며 모델을 구성할 수가 있다. 

[그림-3] 소프트 마진 분류 (soft margin classification)

 

선형 SVM 분류기 사용하기

사이킷런에서 서포트 벡터 머신(SVM) 분류기를 사용할 수 있는데,

사용하고자 한다면 sklearn.svm.LinearSVC 선형 SVM 분류기를 사용할 수 있다.

 

파라미터로는 패널티 항으로써 어떤 것을 사용할 것인지 결정하는 penalty,

어떤 손실 함수를 사용할지 결정하는 loss, 반복을 멈추는 기준이 되는 tol,

오류를 얼마나 무시할지를 결정하는 C(값이 클수록 무시할 오류가 줄어든다.),

데이터를 섞을 때 사용하는 난수인 random_state, 최대 반복 횟수인 max_iter 등등이 있다.

 

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score

#데이터 가져오기
iris = load_iris()

#test,train 세트 분리
X_train, X_test, y_train, y_test = train_test_split(iris.data[:,2:], iris.target)

#선형 SVM 분류기 모델설정
svm = LinearSVC()

#모델 훈련
svm.fit(X_train,y_train)

#test 세트에 대해 예측 및 정확도 출력
y_pred = svm.predict(X_test)
print(accuracy_score(y_test,y_pred))

 

이번시간엔 SVM 선형 분류기의 개념 과 사용 방법에 대해 알아보았다.
혹시 더욱 궁금한 점이 있거나 잘못된 부분이 있다면 자유롭게 댓글을 통해 알려주세요!

참조

Geron, Aurelien, 박해선 역, 핸즈온 머신러닝, 한빛미디어, 2020

 

https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC

 

sklearn.svm.LinearSVC

Examples using sklearn.svm.LinearSVC: Release Highlights for scikit-learn 0.22 Release Highlights for scikit-learn 0.22 Comparison of Calibration of Classifiers Comparison of Calibration of Classif...

scikit-learn.org