본문 바로가기
AI & 머신러닝 coding skill

머신러닝 분류 - SVM(Support Vector Machine)

by 호빵님 2022. 5. 24.
반응형

SVM(Support Vector Machine)

서포트 벡터 머신은 높은 성능을 보여주는 대표적인 분류 알고리즘입니다.

특히 이진 분류를 위해 주로 사용되는 알고리즘으로, 각 클래스의 가장 외곽의 데이터들 즉, 서포트 벡터들이 가장 멀리 떨어지도록 합니다.

이번 실습에서는 0과 1로 분류되어 있는 데이터 셋에서, SVM을 사용하여 데이터가 올바르게 분류되는지 확인해보겠습니다.


SVM을 위한 사이킷런 함수/라이브러리

  • from sklearn.svm import SVC : SVM 모델을 불러옵니다.
  • SVC(): SVM 모델을 정의합니다.
  • [Model].fit(x, y): (x, y) 데이터셋에 대해서 모델을 학습시킵니다.
  • [Model].predict(x): x 데이터를 바탕으로 예측되는 값을 출력합니다.

Tips!

pandas의 DataFrame에 쓸 수 있는 drop 메소드를 활용하면 DataFrame에서 원하는 column(열)의 이름을 통해 해당 column을 삭제할 수 있습니다.

dataset.csv
0.04MB

 

dataset.csv

import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  

import warnings
warnings.filterwarnings(action='ignore')

from sklearn.model_selection import train_test_split  
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix 
"""
1. data 폴더 내에 있는 dataset.csv파일을 불러오고, 
   학습용 데이터와 테스트용 데이터를 분리하여 
   반환하는 함수를 구현합니다.
   
   Step01. pandas의 read_csv() 함수를 이용하여 
           data 폴더 내에 있는 dataset.csv파일을
           불러옵니다. 
   
   Step02. 데이터 X와 y를 분리합니다.
           데이터 폴더에 있는 dataset.csv 파일을
           확인하고,
           
           X 데이터와 y 데이터를 분리하여 각 변수에
           저장합니다.
"""
def load_data():
    
    data = pd.read_csv('data/dataset.csv')
    
    X = data.drop('Class', axis=1)
    y = data['Class']
    
    train_X, test_X, train_y, test_y = train_test_split(X, y, test_size = 0.2, random_state = 0)
    print(X, y)
    return train_X, test_X, train_y, test_y
    
"""
2. SVM 모델을 불러오고,
   학습용 데이터에 맞추어 학습시킨 후, 
   테스트 데이터에 대한 예측 결과를 반환하는 함수를
   구현합니다.
   
   Step01. SVM 모델을 정의합니다.
   
   Step02. SVM 모델을 학습용 데이터에 맞추어
           학습시킵니다.
   
   Step03. 학습된 모델을 이용하여 
           테스트 데이터에 대한 예측을 수행합니다. 
"""
def SVM(train_X, test_X, train_y, test_y):
    
    svm = SVC()
    
    svm.fit(train_X, train_y)
    
    pred_y = svm.predict(test_X)
    
    return pred_y
    
# 데이터를 불러오고, 모델 예측 결과를 확인하는 main 함수입니다.
def main():
    
    train_X, test_X, train_y, test_y = load_data()
    
    pred_y = SVM(train_X, test_X, train_y, test_y)
    
    # SVM 분류 결과값을 출력합니다.
    print("\nConfusion matrix : \n",confusion_matrix(test_y,pred_y))  
    print("\nReport : \n",classification_report(test_y,pred_y)) 

if __name__ == "__main__":
    main()

 

 

*본 포스팅은 DX기업교육 플랫폼인 Elice academy의 머신러닝 심화 과정에서 실습한 코드를 이용해서 작성되었습니다.

https://elice.io/

 
 
 

올인원 디지털 교육 플랫폼 - 엘리스

우리 모두를 위한 교실, 엘리스와 함께 더 나은 기회를 만들어보세요

elice.io

 

 

반응형