ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서포트 벡터 머신 (SVM, Support Vector Machine): 개념부터 실습까지
    🐍 Python 2025. 1. 31. 11:21
    728x90

    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
Designed by Tistory.