Support Vector Machine (SVM)은 기계 학습에서 널리 사용되는 강력한 지도 학습 모델입니다. SVM은 주로 분류와 회귀 분석을 위해 사용되며, 특히 분류 문제에서 뛰어난 성능을 보입니다.
작동 원리
SVM은 다음과 같은 절차로 작동합니다:
- 학습: 주어진 데이터에서 최적의 결정 경계를 찾기 위해 서포트 벡터를 찾습니다.
- 결정 경계 찾기: 초평면(결정 경계)을 정의하고, 이를 최대한 멀리 떨어진 데이터 포인트들과의 거리(margin)가 최대화되도록 합니다.
- 분류: 새로운 데이터가 주어졌을 때, 결정 경계를 기준으로 클래스를 할당합니다.
SVM의 목표
- 벡터 공간에서 학습 데이터가 속한 2개의 그룹을 분류하는 선형 분리자를 찾음.(2개의 그룹을 가장 멀리 구분할 수 있는 선형 분리자)
2. 필요시, 선형 분류가 불가능한 현재 공간을 (한 차원 높은 공간으로 변환하여) 선형 분류가 가능하게 분포되는 공간으로 변환하여 분리함.
- 커널 트리(kernel trick)
- 다항커널(polynomial kernel)
- 가우시안 커(RBF kernel)
SVM 구성요소
- Hyper plane( 초평면)
- 두 그룹을 나누는 경계선
- 특징(feature)의 수보다 한 차원 낮음
- 서포트 벡터(support vector)
- 경계에서 가장 가까운 각 클래스의 데이터의 점
- Margin
- 초평면과 서포트 벡터까지의 수직
코드 예시
svc_scores = []
kernels = [ 'linear', 'poly', 'rbf', 'sigmoid' ]
for i in range(len(kernels)):
svc_classifier = SVC(kernel = kernels[i])
svc_classifier.fit( x_train_standard, y_train)
svc_scores.append(svc_classifier.score(x_test_standard, y_test))
- 시각화
colors = rainbow(np.linspace(0, 1, len(kernels)))
plt.bar(kernels, svc_scores, color = colors)
for i in range(len(kernels)):
plt.text(i, svc_scores[i], svc_scores[i])
plt.xlabel('Kernels')
plt.ylabel('Scores')
plt.title('Support Vector Classifier scores for different kernels')
plt.show()
- 성능 평가
max_idx = np.argmax(svc_scores)
print("The score for Support Vector Classifier is {}% with {} kernel.".format(svc_scores[max_idx]*100,
kernels[max_idx]))
'인공지능&머신러닝' 카테고리의 다른 글
[머신러닝]앙상블(Ensemble) 원리 및 코드 예시 (0) | 2024.06.24 |
---|---|
[머신러닝]랜덤 포레스트(Random Forest) 원리 및 코드 예시 (0) | 2024.06.24 |
[머신러닝]K-최근접 이웃(KNN모델)원리 및 코드 예시 (0) | 2024.06.24 |
[데이터 전처리]데이터 스케일링(Data Scaling): (0) | 2024.06.24 |
[머신러닝]결정트리(Decision Tree)원리 및 코드 예시 (0) | 2024.06.24 |