Python(Colab) 서포트 백터 머신 (Support Vector Machine)

2023. 6. 15. 16:20파이썬/머신러닝 및 딥러닝

✔ 서포트 백터 머신 (Support Vector Machine)

- 두 클래스로부터 최대한 멀리 떨어져 있는 결정 경계를 찾는 분류기

- 특정 조건에 만족하는 동시에 클래스를 분류하는 것을 목표

 

 

데이터로 실습

 

1. 기초설정

 

 

from sklearn.datasets import load_digits  #샘플 데이터
import numpy as np 
 
digits = load_digits()
 
digits.keys()
 

 

2. 데이터만 분리하기( 샘플데이터에서) 

독립변수로 사용예정 

data = digits['data']

data.shape
 

 

 

3. target 데이터 변수의 저장하기

종속변수로 사용예정 

target = digits['target']

target.shape
 

 

 

4. 시각화 해서 데이터 확인 하기 

 

import matplotlib.pyplot as plt
 
fig, axes = plt.subplots(2,5,figsize=(14,10))  # 화면 전체를 만들어주는 것, 2행 5열

for i,ax in enumerate(axes.flatten()):              # 다차원인 데이터를 1차원으로 바꿔서 반복문을 돌리게 하는 함수
    ax.imshow(data[i].reshape((8,8)),cmap='gray')   # 8x8로 gray스케일로 찍어주고
    ax.set_title(target[i])                         # 타이틀도 찍어줘
 
✔ enumerate() : 반환 값이 (index, value)이다.

✔ plt.subplots(): 반환 값이 2개
                      figure = 전체 subplot 개수 
                      axe = 전체 중 낱개를 말한다.
                      ex)  subplot (a1, a2) 그래프가 있으면 a1, a2를 의미한다.

✔ imshow(): matplotlib에 제공하는 메소드
역할 : array의 값들을 색으로 환산하여 이미지 형태로 보여준다.


✔ flatten(): numpy에서 제공하는 함수
역할 : 다차원 배열 공간을 1차원으로 평탄화 해준다.

출처: https://velog.io/@u_jinju/Python-flatten




 

5. 정규화

스케일이 다를 경우 스케일을 맞추는 역할 

 

현재 데이터 상태

# 현재 데이터 상태
 
data[0]
 

 

변환하기

사유: 0~1사이의 값으로 계산하면 더 빠르기때문이다.

from sklearn.preprocessing import MinMaxScaler
 
scaler = MinMaxScaler()
 
scaled = scaler.fit_transform(data)
scaled[0]
 
fit_transform()은 train data에만 쓰인다.
transform()은 test data에만 쓴다.

이유: https://deepinsight.tistory.com/165

 

 

 

학습데이터, 검증데이터 나누기

from sklearn.model_selection import train_test_split
 
X_train, X_test, y_train, y_test = train_test_split(scaled,target,test_size=0.2,random_state=10)

 

 

서포트 백터 머신 적용시키기

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
 
 
#서포트 백터 머신 적용
model = SVC()
model.fit(X_train,y_train)
 
 
# 검증데이터 학습
y_pred = model.predict(X_test)
 
 
# 정확도 확인
accuracy_score(y_test,y_pred)
 

 

서포트 백터 머신 적용 시각화

 

배열중 젤 첫 번째 것만 출력

print(y_test[0],y_pred[0])
plt.imshow(X_test[0].reshape(8,8))
plt.show()
 

 

import matplotlib.pyplot as plt
 
fig,axes = plt.subplots(2,5,figsize=(14,10))

for i, ax in enumerate(axes.flatten()):
    ax.imshow(X_test[i].reshape(8,8),cmap='hot')
    ax.set_title(f'label:{y_test[i]}, Pred: {y_pred[i]}')

 

728x90