본문 바로가기
개발

sklearn 사이킷런 SVM모델 그래프 그리기 (margin, decision boundary)

by 화악 2022. 5. 16.
반응형

sklearn라이브러리에서 자주 쓰이는 모델로 머신러닝 입문자라면 누구나 한번쯤 돌려봤을 기초적인 코드입니다. 오늘은 SVM(서포트벡터머신)으로 margin, decision boundary를 포함하여 plot을 그려보는 예제 코드를 소개하려고 합니다. 이번에는 그저 그래프를 그리는 예제이기 때문에 따로 SVM의 개념과 margin이 크면 좋은 모델이다 하이퍼 파라미터 C는 어떤식으로 설정해야 된다던지 하는 내용은 담지 않겠습니다. 

 

csv 데이터 읽기


import pandas as pd

x = pd.read_csv('2_X_1.csv')
y = pd.read_csv('2_Y_1.csv')

x= x.iloc[:,0:2].values
y = y.values

x= np.array(x)
y= np.array(y)

먼저 자주 쓰인 pandas로 csv파일을 읽어와 x 입력 데이터와 y 라벨 데이터를 정의합니다.

 

 

Linear SVM 모델 


from sklearn import svm
import numpy as np

svm1 = svm.SVC(kernel='linear')
svm1.fit(x,y.ravel())

sklearn의 최대장점은 좋은 모델들을 한줄로 불러 오고 직접 실행시켜 볼 수 있다는 편의성이죠 단 2줄로 끝냅시다.

 

 

 

RBF SVM 모델 


svm1 = svm.SVC(kernel='rbf')
svm1.fit(x,y.ravel())

 

SVM plot 그리기 


import math
import matplotlib.pyplot as plt

def showplt(x,y,svm1,title):

    plt.scatter(x[:,0], x[:,1], c=y, s=30, cmap=plt.cm.Paired)

    ax = plt.gca()
    xlim = ax.get_xlim()
    ylim = ax.get_ylim()

    xx = np.linspace(xlim[0], xlim[1], 30)
    yy = np.linspace(ylim[0], ylim[1], 30)
    YY, XX = np.meshgrid(yy, xx)
    xy = np.vstack([XX.ravel(), YY.ravel()]).T
    Z = svm1.decision_function(xy).reshape(XX.shape)

    #margins,decision boundary
    ax.contour(XX, YY, Z, colors='k', levels=[-1,0,1], alpha=0.5, linestyles=['--', '-', '--'])

    #Support Vector
    ax.scatter(svm1.support_vectors_[:,0], svm1.support_vectors_[:,1], s=60, facecolors='r')
    plt.title(title)
    plt.show()

모델과 x,y데이터를 불러와 데이터 표시 및 margins, decision boundary를 그려주는 코드입니다. 

 

 

결과


결과값

실선으로 결정경계선을 나타내고 마진거리에 있는 서포트벡터들을 빨간색으로 처리해주었습니다. 

반응형

댓글