-
서포트 벡터 머신 (SVM, Support Vector Machine): 개념부터 실습까지🐍 Python 2025. 1. 31. 11:21728x90
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와 같은 기법을 사용하여 최적의 하이퍼파라미터를 찾는 것이 중요합니다.
728x90'🐍 Python' 카테고리의 다른 글
KK-최근접 이웃 (KNN, K-Nearest Neighbors) 알고리즘: 개념부터 실습까지 (0) 2025.01.31 리니어리그레션 (Linear Regression) 완벽 이해: 경력과 연봉의 관계 예측하기- Prediction (예측) (0) 2025.01.30 머신러닝과 데이터 전처리 - 초보자를 위한 친절한 가이드 (0) 2025.01.30 파이썬 그래프 관련 함수 정리 (Matplotlib 중심) (0) 2025.01.29 로지스틱 회귀 (Logistic Regression): 머신러닝 이진 분류 알고리즘의 이해와 실습 (0) 2025.01.27