AI/이론

133. [Python] [Machine Learning] : Support Vector Machine

천재단미 2025. 1. 31. 12:24
728x90
반응형

반응형

 

 

 

🎯 1. 서포트 벡터 머신(SVM)이란?

  • *SVM(Support Vector Machine)**은 지도 학습(Supervised Learning) 알고리즘 중 하나로, 분류(Classification)와 회귀(Regression) 문제를 해결하는 데 사용됩니다.
  • 분류 문제(Classification): 주어진 데이터를 두 개 이상의 그룹으로 나누는 문제
  • 회귀 문제(Regression): 연속적인 값을 예측하는 문제

SVM의 핵심 개념은 **결정 경계(Decision Boundary)**를 찾아 데이터를 가장 잘 구분하는 초평면(Hyperplane)을 설정하는 것입니다.

 

 


 

🎯 2. 최적의 결정 경계(Decision Boundary)

결정 경계란?

  • 데이터 포인트를 두 개의 그룹으로 나누는 선(또는 다차원 공간에서는 평면)
  • 데이터가 2차원일 경우, 결정 경계는 직선
  • 데이터가 3차원일 경우, 결정 경계는 평면
  • 더 높은 차원에서는 초평면(Hyperplane)

결정 경계를 어떻게 정할까?

  • 여러 개의 결정 경계를 그을 수 있지만, 마진(Margin)을 최대화하는 결정 경계가 가장 좋은 경계입니다.
  • 마진(Margin): 결정 경계와 서포트 벡터(Support Vector) 사이의 거리

 

 


 

 

🎯 3. 마진(Margin)

마진(Margin)이란?

  • 결정 경계와 서포트 벡터 사이의 거리
  • 최적의 결정 경계는 마진을 최대화하는 방향으로 설정됨
  • 마진을 최대로 하여 데이터가 결정 경계에서 멀리 떨어지도록 하면 모델이 새로운 데이터를 잘 일반화할 수 있음

서포트 벡터(Support Vector)란?

  • 결정 경계와 가장 가까운 데이터 포인트들
  • 결정 경계를 정의하는 중요한 역할을 하는 데이터 포인트

 

 


 

 

🎯 4. 이상치(Outlier) 처리와 소프트 마진 (Soft Margin)

실제 데이터에는 이상치(outlier)가 존재할 수 있음.

이때, SVM이 이상치를 얼마나 허용할 것인지 조정하는 C 파라미터가 중요합니다.

 

C 값 설명

낮은 C 오류를 조금 허용함 → 소프트 마진 (Soft Margin)
높은 C 오류를 거의 허용하지 않음 → 하드 마진 (Hard Margin)

 

 

✅ C 값 조정 예제

svm_model_soft = SVC(kernel='linear', C=0.1)  # 소프트 마진 (오류를 허용)
svm_model_hard = SVC(kernel='linear', C=100)  # 하드 마진 (오류를 거의 허용하지 않음)

 

 


 

🎯 5. 커널(Kernel) 기법 - 비선형 데이터를 위한 방법

실제 데이터는 직선(Linear)으로 구분할 수 없는 경우가 많습니다.

이때 **SVM의 커널(Kernel) 기법을 사용하여 데이터를 변환(고차원 맵핑)**할 수 있습니다.

🔹 대표적인 커널 종류

  1. 선형 커널(Linear Kernel) → 선형적으로 구분 가능할 때
  2. 다항식 커널(Polynomial Kernel) → 곡선 형태로 데이터를 분리해야 할 때
  3. RBF (Radial Basis Function) 커널 → 가장 널리 사용됨, 데이터를 비선형 공간으로 변환

 

✅ 커널별 예제

svm_linear = SVC(kernel='linear')  # 선형 커널
svm_poly = SVC(kernel='poly', degree=3)  # 다항식 커널 (3차원)
svm_rbf = SVC(kernel='rbf', gamma='scale')  # RBF 커널

 

 

📌 RBF 커널을 사용한 예제

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.svm import SVC


# 데이터 생성
# Importing the dataset
df = pd.read_csv('../data/Social_Network_Ads.csv')

# X,y 분리 
y = df['Purchased']
X = df.loc[ : ,'Age':'EstimatedSalary']

# 스캐일러
scaler_X  = StandardScaler()
X = scaler_X.fit_transform( X )

# 분리 
X_train, X_test, y_train, y_test = train_test_split(X, y ,test_size = 0.2, random_state = 27)



# RBF 커널 SVM 모델 학습
classifier2 = SVC(kernel = 'rbf')
classifier2.fit(X_train, y_train)



# 예측
y_pred2 = classifier2.predict(X_test)



confusion_matrix(y_test,y_pred2)
accuracy_score(y_test,y_pred2)

 

 

 


 

🎯 6. SVM의 분류(Classification)과 회귀(Regression)

🔹 SVM 분류 (SVC)

  • 이진 분류(Binary Classification)
  • 데이터 포인트를 두 개의 그룹으로 나누는 문제
  • SVC(kernel='linear') 사용

🔹 SVM 회귀 (SVR)

  • 연속적인 값을 예측하는 문제
  • Support Vector Regression (SVR) 사용
  • SVR(kernel='linear'), SVR(kernel='rbf') 등 사용 가능

 

✅ SVM을 이용한 회귀 예제

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.svm import SVC



# 데이터 생성
# Importing the dataset
df = pd.read_csv('../data/Social_Network_Ads.csv')

# X,y 분리 
y = df['Purchased']
X = df.loc[ : ,'Age':'EstimatedSalary']

# 스캐일러
scaler_X  = StandardScaler()
X = scaler_X.fit_transform( X )

# 분리 
X_train, X_test, y_train, y_test = train_test_split(X, y ,test_size = 0.2, random_state = 27)


#SVR 모델 학습 
classifier = SVC()
classifier.fit(X_train, y_train)

# 예측
y_pred = classifier.predict(X_test)



confusion_matrix(y_test,y_pred)
accuracy_score(y_test,y_pred)

 

 

출력

 


🎯 7. 요약

SVM은 분류(Classification)와 회귀(Regression) 문제 해결에 사용됨

최적의 결정 경계를 찾기 위해 마진(Margin)을 최대화

C 값이 크면 하드 마진, 작으면 소프트 마진

비선형 데이터는 커널(Kernel) 기법을 사용하여 변환 가능

SVM은 scikit-learn에서 쉽게 구현 가능 (SVC, SVR)

💡 SVM은 강력한 지도 학습 모델로, 특히 분류 문제에서 많이 사용됩니다.

728x90
반응형
home top bottom
}