1️⃣ SVM이란?
서포트 벡터 머신(SVM, Support Vector Machine)은 지도 학습(Supervised Learning) 기반의 강력한 분류(Classification) 알고리즘입니다. SVM은 결정 초평면(Hyperplane)을 학습하여 데이터를 두 개 이상의 클래스로 나누는 방식으로 작동합니다.
📌 SVM의 핵심 개념
- 마진(Margin) 최대화: SVM은 데이터를 가장 잘 분리하는 결정 초평면을 찾고, 마진을 최대화합니다.
- 서포트 벡터(Support Vectors): 결정 초평면과 가장 가까운 데이터 포인트들.
- 커널 트릭(Kernel Trick): 데이터를 고차원으로 변환하여 선형적으로 구분할 수 있도록 함.
📌 SVM의 활용 사례
- 얼굴 인식 (Face Recognition)
- 스팸 필터링 (Spam Filtering)
- 질병 진단 (Medical Diagnosis)
- 주식 시장 예측 (Stock Market Prediction)
2️⃣ SVM의 동작 원리
📌 결정 초평면 (Hyperplane)
SVM은 데이터를 분류하는 최적의 결정 초평면을 학습합니다.
- 2차원 공간에서는 선(Line)
- 3차원에서는 평면(Plane)
- N차원에서는 초평면(Hyperplane)
📌 마진(Margin) 최대화
- 마진이 크면 일반화(generalization) 성능이 향상됩니다.
- 서포트 벡터는 결정 초평면과 가장 가까운 데이터 포인트들로 정의됩니다.
- SVM은 이 마진을 최대로 하는 초평면을 찾는 것이 목표입니다.
3️⃣ SVM 커널 트릭(Kernel Trick) 이해
SVM은 데이터가 선형적으로 분리되지 않을 경우 커널 함수(Kernel Function)를 사용하여 고차원 공간으로 변환하여 분류합니다.
📌 주요 커널 종류
커널 | 종류설명 |
Linear Kernel | 데이터가 선형적으로 구분될 경우 사용 |
Polynomial Kernel | 다항식 변환을 통해 비선형 데이터를 분류 |
RBF (Radial Basis Function) Kernel | 가장 널리 사용되는 커널, 비선형 데이터에 강력 |
Sigmoid Kernel | 신경망에서 사용되는 활성화 함수와 유사 |
4️⃣ 실습: SVM을 활용한 광고 클릭 예측
📌 사용 데이터
- 데이터셋: Social_Network_Ads.csv
- 목표: 사용자의 나이와 연봉을 기반으로 광고 클릭 여부 예측
📌 1. 데이터 로드 및 전처리
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix, accuracy_score
# 데이터 로드
dataset = pd.read_csv('Social_Network_Ads.csv')
# 독립변수(X)와 종속변수(y) 분리
X = dataset[['Age', 'EstimatedSalary']].values
y = dataset['Purchased'].values
# 훈련 데이터와 테스트 데이터로 분리 (80:20 비율)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 피처 스케일링 (표준화)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
✅ 데이터를 전처리하고, 훈련 데이터와 테스트 데이터로 나눕니다.
📌 2. SVM 모델 학습 및 예측
# SVM 모델 생성 (RBF 커널 사용)
classifier = SVC(kernel='rbf', random_state=42)
classifier.fit(X_train, y_train)
✅ RBF 커널을 사용하여 모델을 학습시킵니다.
# 예측 수행
y_pred = classifier.predict(X_test)
✅ 테스트 데이터를 기반으로 예측값을 도출합니다.
📌 3. 모델 평가: 혼동 행렬 및 정확도 분석
# 혼동 행렬 및 정확도 계산
cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
print("Confusion Matrix:")
print(cm)
print(f"Accuracy: {accuracy:.2f}")
✅ 혼동 행렬(Confusion Matrix)과 정확도를 출력하여 모델 성능을 평가합니다.
5️⃣ 평가 및 SVM 최적화
📌 혼동 행렬 (Confusion Matrix)
실제 값 → 예측 값 ↓ | 0 (미구매) | 1 (구매) |
0 (미구매) | TN (True Negative) | FP (False Positive) |
1 (구매) | FN (False Negative) | TP (True Positive) |
📌 정확도 분석
- 정확도(Accuracy): 전체 예측 중 맞춘 비율
- 정밀도(Precision), 재현율(Recall), F1-score 도출 가능
📌 최적의 하이퍼파라미터 찾기
from sklearn.model_selection import GridSearchCV
# SVM 하이퍼파라미터 튜닝
parameters = {'C': [0.1, 1, 10, 100], 'kernel': ['linear', 'rbf']}
grid_search = GridSearchCV(SVC(), parameters, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
print("최적의 하이퍼파라미터:", grid_search.best_params_)
✅ 최적의 C 값과 커널을 찾기 위해 GridSearchCV를 사용합니다.
6️⃣ 결론 및 요약
- SVM은 강력한 분류 모델로, 마진을 최대화하여 데이터를 구분합니다.
- 선형적으로 분리되지 않는 데이터를 위해 커널 트릭을 활용할 수 있습니다.
- 하이퍼파라미터 튜닝(C, Kernel 선택)을 통해 최적화할 수 있습니다.
- GridSearchCV와 같은 기법을 사용하여 최적의 하이퍼파라미터를 찾는 것이 중요합니다.
'🐍 Python' 카테고리의 다른 글
Unsupervised Learning과 K-Means Clustering (0) | 2025.01.31 |
---|---|
디시전 트리(Decision Tree) 개념과 데이터 분할 (0) | 2025.01.31 |
KK-최근접 이웃 (KNN, K-Nearest Neighbors) 알고리즘: 개념부터 실습까지 (0) | 2025.01.31 |
리니어리그레션 (Linear Regression) 완벽 이해: 경력과 연봉의 관계 예측하기- Prediction (예측) (0) | 2025.01.30 |
머신러닝과 데이터 전처리 - 초보자를 위한 친절한 가이드 (0) | 2025.01.30 |