[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 커널을 사용하는 분류 모델의 결정 경계를 시각화할 수 있습니다. 그래프를 통해 어떻게 데이터가 분류되는지 직관적으로 이해할 수 있습니다.
참고 자료:
scikit-learn
: https://scikit-learn.org/matplotlib
: https://matplotlib.org/
```