본문 바로가기
2023 빅리더 프로젝트 인턴십/ML

[ML] day5 지도학습 - 서포트 벡터 머신

by 혜o_n 2023. 7. 22.

 서포트 벡터 머신 개념

* 서포트 벡터 머신

- 서포트 벡터 머신의 길의 폭(두 서포트 벡터 간 너비)을 최대한 넗히는 것이 목표

- w벡터는 중심선과 수직 = > 중심선이 초평면( 내적해서 0이 되는 지점을 이은 것)

- w를 구하면 중심선을 그릴 수 있음 => w를 구하는 것이 목적

* 최종 결론

 실습

import pandas as pd
df = pd.read_csv('./data/wine_data.csv')

features = ['Alcohol', 'Malic', 'Ash', 'Alcalinity', 'Magesium', 'Phenols',
       'Flavanoids', 'Nonflavanoids', 'Proanthocyanins', 'Color', 'Hue',
       'Dilution', 'Proline']

X = df[features]
y = df['class']

# 트레이닝/테스트 데이터 분할
from sklearn.model_selection import train_test_split
X_tn, X_te, y_tn, y_te = train_test_split(X, y, random_state=0)

# 데이터 표준화
from sklearn.preprocessing import StandardScaler
std_scale = StandardScaler()
std_scale.fit(X_tn)
X_tn_std = std_scale.transform(X_tn)
X_te_std = std_scale.transform(X_te)
# 서포트 벡터 머신
from sklearn import svm
clf_svm_lr = svm.SVC(kernel='linear')
clf_svm_lr.fit(X_tn_std, y_tn)

- 분류 ==> SVC  / 회귀분석 ==> SVR

- 선형이 아닌 비선형으로 분류하고 싶으면 k e r n e l 값을 변경

# 예측
pred_svm = clf_svm_lr.predict(X_te_std)
print(pred_svm)

### 결과값 ###
[0 2 1 0 1 1 0 2 1 1 2 2 0 1 2 1 0 0 1 0 1 0 0 1 1 1 1 1 1 2 0 0 1 0 0 0 2
 1 1 2 0 0 1 1 1]

 

# 정확도 
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_te, pred_svm)
print("accuracy:", accuracy)

# 정밀도 
from sklearn.metrics import precision_score
precision = precision_score(y_te, pred_svm, average='macro')
print("precision:", precision)

# 리콜 
from sklearn.metrics import recall_score
recall = recall_score(y_te, pred_svm, average='macro')
print("recall:", recall)

# F1 스코어
from sklearn.metrics import f1_score
f1 = f1_score(y_te, pred_svm, average='macro')
print("f1:", f1)

### 결과값 ###
accuracy: 1.0
precision: 1.0
recall: 1.0
f1: 1.0

 

# confusion matrix 확인
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_te, pred_svm)
print(conf_matrix)

### 결과값 ###
[[16  0  0]
 [ 0 21  0]
 [ 0  0  8]]

 

# 분류 레포트 확인
from sklearn.metrics import classification_report
class_report = classification_report(y_te, pred_svm)
print(class_report)

### 결과값 ###
              precision    recall  f1-score   support

           0       1.00      1.00      1.00        16
           1       1.00      1.00      1.00        21
           2       1.00      1.00      1.00         8

    accuracy                           1.00        45
   macro avg       1.00      1.00      1.00        45
weighted avg       1.00      1.00      1.00        45

댓글