인공지능 머신러닝 - Support Vector Machine 모델 (SVM)

# SVM (Support Vector Machine)

  • 자료 분석을 위한 지도 학습 모델이며, 주로 분류(SVC)와 회귀(SVR) 분석을 위해 사용
    • SVC : Support Vector Classification, 분류 모델
      • 주어진 데이터 집합을 바탕으로 새로운 데이터가 어느 카테고리에 속할지 판단
      • 만들어진 분류 모델은 데이터가 경계로 표현, 그 중 가장 큰 폭(Margin)을 가진 경계를 찾는 것
        = 즉, 마진을 최대화하는 것
        • 마진(Margin) : 분류선(경계)에서 가장 가까운 데이터와의 거리
      • 마진을 최대화하여 분류하기 때문에 구분하기 힘든 것까지 잘 분류하는 문제에 적합
    • SVR : Support Vector Regression, 회귀 모델

 

# SVM 라이브러리 호출

import matplotlib.pyplot as plt
# 표 작성을 위한 라이브러리

import pandas
# 데이터프레임 사용을 위한 라이브러리

from sklearn.preprocessing import StandardScaler
# 피처 스케일링 표준화 사용을 위한 라이브러리

from sklearn.model_selection import train_test_split
# 인공지능 학습을 위한 라이브러리

from sklearn.svm import SVC
# SVM 인공지능 모델링을 위한 라이브러리
# SVC(Support Vector Classification) 분류를 위해 사용

from sklearn.metrics import confusion_matrix, accuracy_score
# 인공지능 성능을 확인하기 위한 라이브러리

 

# SVM의 SVC 분류 모델로 인공지능 학습하기

  • 나이와 연봉을 분석해서 물건 구매 여부를 예측
  • 예시에 쓰일 데이터프레임

Social_Network_Ads.csv
0.01MB

 

1. 피처 스케일링

  • 우선 NaN값이 존재하는지 확인, 존재하면 NaN처리

 

  • 독립 변수와 종속 변수 지정, 데이터(X, y) 분리
    • 독립 변수(X) : 나이(Age) / 연봉(EstimatedSalary)
    • 종속 변수(y) : 구매횟수(Purchased)

 

  • 데이터 표준화 (정규화 해도 됨)
    • from sklearn.preprocessing import StandardScaler 호출

 

2. 데이터(학습용/테스트용) 분리

  • from sklearn.model_selection import train_test_split 호출

 

3. 인공지능 SVM 모델링

  • from sklearn.svm import SVC 호출
  • kernel : linear(선형), poly(다항식), rbf(가우시안)
    • 커널은 분류 경계면의 종류를 뜻함

 

4. 인공지능 성능 테스트

 

5. 인공지능 성능 확인

  • from sklearn.metrics import confusion_matrix, accuracy_score 호출
  • 정확도 확인 83%

 

  • 성능 확인 결과 시각화
    • import seaborn 호출
    • import matplotlib.pyplot as plt

 

6. 인공지능 학습 결과 시각화

  • 테스트 데이터로 예측한 결과 값 그래프화
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('K-NN (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

 

  • 학습에 사용된 데이터를 그래프화
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('K-NN (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()