| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- AP
- 오류역전파
- 파이썬
- 생명정보학
- 자바
- Java
- 캐글
- 인공신경망
- COVID
- bioinformatics
- RNN
- CNN
- AP Computer Science A
- 결정트리
- 바이오파이썬
- SVM
- 딥러닝
- ncbi
- 바이오인포매틱스
- HMM
- 서열정렬
- 시그모이드
- BLaST
- Kaggle
- 생물정보학
- MERS
- 블록체인
- 인공지능 수학
- 인공지능
- 이항분포
- Today
- Total
데이터 과학
비선형 SVM 실습 예제 본문
SVM은 지도학습(Supervised Learning)에서 분류(Classification)나 회귀(Regression) 분석에 주로 사용되는 머신러닝 알고리즘 중 하나입니다. SVM을 사용하여 비선형(non-linear) 데이터를 분류하는 경우, 커널 트릭(kernel trick)을 사용하여 데이터를 고차원 특징 공간(feature space)으로 매핑하여 선형 결정 경계를 찾습니다.
아래는 Python에서 scikit-learn 라이브러리를 사용하여 비선형 SVM 모델을 도식화하는 예제 코드입니다. 이 코드는 scikit-learn의 make_moons() 함수를 사용하여 무작위로 생성된 두 개의 반달 모양 데이터를 분류합니다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
# 데이터 생성
X, y = make_moons(n_samples=100, noise=0.15, random_state=42)
# 데이터 시각화
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
# SVM 모델 생성 및 학습
svm_clf = Pipeline([
("scaler", StandardScaler()),
("svm_clf", SVC(kernel="rbf", gamma=0.1, C=0.5))
])
svm_clf.fit(X_train, y_train)
# 결정 경계 도식화
def plot_decision_boundary(model, xmin, xmax, ymin, ymax):
xx, yy = np.meshgrid(np.linspace(xmin, xmax, 1000),
np.linspace(ymin, ymax, 1000))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.3)
# SVM 모델 결정 경계 도식화
plot_decision_boundary(svm_clf, xmin=-2, xmax=3, ymin=-2, ymax=2)
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()
위 코드에서는 scikit-learn의 make_moons() 함수를 사용하여 무작위로 생성된 두 개의 반달 모양 데이터를 생성하고, 이를 scatter() 함수를 사용하여 시각화합니다. 그 다음, 데이터를 학습 세트와 테스트 세트로 분할하고, SVM 모델을 생성합니다. 이때 kernel 매개변수를 "rbf"(방사 기저 함수 커널)로 지정하여 비선형 SVM 모델을 생성합니다.

다른 예제를 하나 실행보면 다음과 같습니다.
from sklearn.datasets import make_circles
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np
# 원형 데이터 생성
X, y = make_circles(n_samples=100, noise=0.1, factor=0.5, random_state=42)
# 이제 SVM 모델을 학습시키고 결정 경계를 도식화합니다. 비선형 모델을 사용하기 위해 커널(kernel)을 'rbf'로 지정합니다.
clf = SVC(kernel='rbf', gamma='scale')
clf.fit(X, y)
# 결정 경계 도식화
xx, yy = np.meshgrid(np.linspace(-1.5, 1.5, 500),
np.linspace(-1.5, 1.5, 500))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.RdBu, alpha=0.5)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdBu, edgecolors='k')
plt.xticks(())
plt.yticks(())
plt.show()
위 코드를 실행하면 다음과 같은 결정 경계를 도식화할 수 있습니다.

위 그림에서 파란색은 클래스 0, 빨간색은 클래스 1을 나타냅니다. 검은색 실선은 SVM 모델이 찾은 결정 경계입니다. 이 모델은 비선형 데이터를 성공적으로 분류하고 있습니다.
'인공지능 > SVM' 카테고리의 다른 글
| 간단한 SVM 파이썬 예제 (0) | 2023.05.03 |
|---|---|
| Support Vector Machine (0) | 2021.05.25 |
