[python] Matplotlib로 RBF 커널 SVC 그래프 그리기

지난 주제에서는 scikit-learn을 사용하여 Radial Basis Function(RBF) 커널을 사용하는 Support Vector Machine(SVM)을 구현하는 방법에 대해 알아보았습니다. 이번 포스트에서는 matplotlib을 사용하여 RBF 커널 SVM의 그래프를 그리는 방법에 대해 알아보겠습니다.

먼저, 필요한 패키지를 import 해줍시다:

import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
import matplotlib.pyplot as plt

다음으로, 데이터셋을 준비합니다. 이 예제에서는 내장된 iris 데이터셋을 사용하겠습니다:

iris = datasets.load_iris()
X = iris.data[:, :2]   # 특성 중 처음 두 개만 사용
y = iris.target

SVM 모델을 인스턴스화하고 학습시킵니다:

svc = SVC(kernel='rbf')
svc.fit(X, y)

이제 그래프를 그려봅시다. 먼저, 그래프의 x, y 축 범위를 설정합니다:

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))

이제 그래프에 결정 경계(decision boundary)를 그립니다:

Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.RdBu)

마지막으로, 데이터 포인트를 그래프에 그립니다:

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdBu, edgecolors='k')

그래프를 보여줍니다:

plt.show()

이제 모든 코드를 함께 보면 다음과 같습니다:

import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
import matplotlib.pyplot as plt

iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target

svc = SVC(kernel='rbf')
svc.fit(X, y)

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))

Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.RdBu)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdBu, edgecolors='k')

plt.show()

위의 코드를 실행하면, RBF 커널을 사용하는 분류 모델의 결정 경계를 시각화할 수 있습니다. 그래프를 통해 어떻게 데이터가 분류되는지 직관적으로 이해할 수 있습니다.


참고 자료:

```