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) 기법을 사용하여 데이터를 변환(고차원 맵핑)**할 수 있습니다.
🔹 대표적인 커널 종류
- 선형 커널(Linear Kernel) → 선형적으로 구분 가능할 때
- 다항식 커널(Polynomial Kernel) → 곡선 형태로 데이터를 분리해야 할 때
- 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
반응형
'AI > 이론' 카테고리의 다른 글
135. [Python] [Machine Learning] : K-평균 군집화(K-Means Clustering) (0) | 2025.01.31 |
---|---|
134. [Python] [Machine Learning] : 의사결정나무(Decision Tree) (2) | 2025.01.31 |
132.[Python] [Machine Learning] : 선형 회귀(Linear Regression)와 비선형 회귀(Non-Linear Regression) (0) | 2025.01.31 |
131. [Python] [Machine Learning] : 성능 평가 방법과 종류 (0) | 2025.01.31 |
129. [Python] [Machine Learning] : K-NN 알고리즘 (0) | 2025.01.28 |