Python 데이터 분석

Python 데이터분석 기초 65 - Support Vector Machine(SVM)

코딩탕탕 2022. 11. 23. 15:11

 

Support Vector Machine(SVM)

분류와 회귀분석을 위해 주로 사용한다. 두 카테고리 중 어느 하나에 속한 데이터의 집합이 주어졌을 때, SVM 알고리즘은 주어진 데이터 집합을 바탕으로 하여 새로운 데이터가 어느 카테고리에 속할지 판단하는 비확률적 이진 선형분류 모델을 만든다. 만들어진 분류 모델은 데이터가 사상된 공간에서 경계로 표현되는데 SVM 알고리즘은 그 중 가장 큰 폭을 가진 경계를 찾는 알고리즘이다. SVM은 선형 분류와 더불어 비선형 분류에서도 사용될 수 있다.

 

 

# Support Vector Machine(SVM)
# 분류와 회귀분석을 위해 주로 사용한다. 두 카테고리 중 어느 하나에 속한 데이터의 집합이 주어졌을 때,
# SVM 알고리즘은 주어진 데이터 집합을 바탕으로 하여 새로운 데이터가 어느 카테고리에 속할지 판단하는
# 비확률적 이진 선형분류 모델을 만든다. 만들어진 분류 모델은 데이터가 사상된 공간에서 경계로
# 표현되는데 SVM 알고리즘은 그 중 가장 큰 폭을 가진 경계를 찾는 알고리즘이다. SVM은 선형 분류와
# 더불어 비선형 분류에서도 사용될 수 있다.

# SVM으로 XOR 연산 처리
x_data = [
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
]

import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn import svm, metrics

x_df = pd.DataFrame(x_data)
print(x_df)
feature = np.array(x_df.iloc[:, 0:2]) # 슬라이싱
label = np.array(x_df.iloc[:, 2]) # 인덱싱
print(feature)
print(label)

model1 = LogisticRegression().fit(feature, label)
pred = model1.predict(feature)
print('Logistic 예측값 :', pred)

print('Logistic acc :', metrics.accuracy_score(label, pred))

print('--------')

model2 = svm.SVC().fit(feature, label)
pred = model2.predict(feature)
print('svm 예측값 :', pred)

print('svm acc :', metrics.accuracy_score(label, pred))


<console>
   0  1  2
0  0  0  0
1  0  1  1
2  1  0  1
3  1  1  0
[[0 0]
 [0 1]
 [1 0]
 [1 1]]
[0 1 1 0]
Logistic 예측값 : [0 0 0 0]
Logistic acc : 0.5
--------
svm 예측값 : [0 1 1 0]
svm acc : 1.0