서포트 벡터 머신(SVM)

소개
Support Vector Machine은 가장 널리 사용되는 기계 학습 알고리즘 중 하나입니다. 분류뿐만 아니라 회귀 문제에도 사용됩니다. 그러나 주로 기계 학습 영역의 분류 문제에서 그 사용이 관찰되었습니다. 많은 사람들이 서포트 벡터 머신을 선호하는데, 그 이유는 처리 능력을 적게 사용하면서 뛰어난 정확도를 제공하기 때문입니다. Support Vector Machine은 초평면을 통해 데이터를 분리하고 새 데이터 포인트는 가장 적합한 범주에 배치됩니다. 이것이 Support Vector Machine의 기본 목표입니다. 이 초평면은 Support Vector Machine의 결정 경계라고도 합니다. 데이터 요소의 두 클래스를 분할하는 데 사용할 수 있는 다양한 초평면이 있습니다. 마진이 가장 큰 비행기 찾기 — 즉,
예시
고양이와 개를 정확하게 구별할 수 있는 모델을 원한다면 개를 닮은 특이한 고양이를 관찰한다고 가정해 봅시다. SVM 알고리즘을 활용하여 이러한 모델을 구축할 수 있습니다. 이 이상한 동물로 테스트하기 전에 고양이와 개의 다양한 속성에 익숙해질 수 있도록 먼저 고양이와 개 사진 몇 장으로 모델을 훈련시킬 것입니다. 결과적으로 고양이와 개의 극단적인 경우는 이 두 데이터 세트(고양이와 개) 사이에 판단 경계를 그리므로 지원 벡터에서 볼 수 있습니다. 지원 벡터는 고양이로 분류하는 데 사용됩니다.
SVM의 종류
선형 SVM : "선형적으로 분리 가능한 데이터"라는 용어는 하나의 직선만을 사용하여 두 그룹으로 나눌 수 있는 데이터를 의미합니다. 이러한 데이터를 분류하기 위해 선형 SVM이 사용되며, 활용되는 분류기를 선형 SVM 분류기라고 합니다.

N on-linear SVM : Non-Linear SVM은 비선형적으로 분리된 데이터에 사용되는데, 데이터셋을 직선으로 분류할 수 없는 경우 이러한 데이터를 비선형 데이터라고 하고 사용하는 분류기를 Non라고 합니다. -선형 SVM 분류기.

일하고 있는
SVM은 데이터를 고차원 기능 공간에 매핑하여 선형으로 분리할 수 없는 경우에도 데이터 포인트를 분류합니다. 범주 간의 구분 기호가 식별되면 구분 기호의 초평면 표현을 사용하도록 데이터가 변환됩니다. 새 레코드가 속해야 하는 그룹은 새 데이터의 특성을 사용하여 예측할 수 있습니다.
비용 함수 및 기울기 업데이트
SVM 방법의 목표는 데이터 포인트와 초평면 사이의 거리를 늘리는 것입니다. 힌지 손실은 마진을 최대화하는 데 도움이 되는 손실 함수입니다.
예상 가치와 실제 가치의 부호가 같으면 비용이 없습니다. 그렇지 않은 경우 다음으로 손실 가치를 결정합니다. 비용 함수는 정규화 매개변수도 받습니다. 정규화 매개변수의 목표는 마진 최대화와 손실 간의 균형을 맞추는 것입니다. 정규화 매개변수가 추가된 후 비용 함수는 다음과 같이 나타납니다.
이제 손실 함수가 있으므로 가중치에 대한 편도함수를 취하여 그래디언트를 찾을 수 있습니다. 그래디언트를 사용하여 가중치를 수정할 수 있습니다.
오분류가 없는 경우, 즉 모델이 데이터 포인트의 클래스를 올바르게 예측하는 경우에만 정규화 매개변수에서 그래디언트를 업데이트하면 됩니다.
잘못된 분류가 있거나 모델이 데이터 포인트의 클래스를 잘못 예측할 때 그래디언트 업데이트를 수행하기 위해 정규화 매개변수와 함께 손실을 포함합니다.
샘플 프로그램 조각
라이브러리 가져오기
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
class SVM:
def __init__(self, learning_rate=0.0001, lambda_param=0.001, n_iters=10000):
self.weights = None
self.bias = None
self.lr = learning_rate
self.lambda_param = lambda_param
self.n_iters = n_iters
def fit(self,X,y):
n_samples, n_features = X.shape
y1 = np.where(y <= 0, -1, 1)
self.weights = np.zeros(n_features)
self.bias = 0
for i in range(self.n_iters):
for idx, x_i in enumerate(X):
condition = y1[idx] * (np.dot(x_i, self.weights) - self.bias) >= 1
if condition:
self.weights -= self.lr * (2 * self.lambda_param * self.weights)
else:
self.weights -= self.lr * (2 * self.lambda_param * self.weights - np.dot(x_i, y1[idx]))
self.bias -= self.lr * y1[idx]
def predict(self, X):
approx = np.dot(X, self.weights) - self.bias
return np.sign(approx)
def accuracy(y_true,y_pred):
acc = np.sum(y_true == y_pred)/len(y_true)
return acc
X, y = datasets.make_blobs(n_samples=10, n_features=2, centers=2, cluster_std=1.05, random_state=40)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)
y = np.where(y == 0, -1, 1)
clf = SVM()
clf.fit(X_train,y_train)
predict = clf.predict(X_test)
svm_acc = accuracy(y_test,predict)
print('Accuracy:',svm_acc)
print(f'''
Final Weight:{clf.weights}
Final Bias:{clf.bias}
''')
최종 가중치:[0.34494241 0.1443094 ]
최종 바이어스:-0.012899999999999977
심상
def visualize_svm():
def get_hyperplane_value(x, w, b, offset):
return (-w[0] * x + b + offset) / w[1]
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
plt.scatter(X[:,0], X[:,1], marker='x',c=y)
x0_1 = np.amin(X[:,0])
x0_2 = np.amax(X[:,0])
x1_1 = get_hyperplane_value(x0_1, clf.weights, clf.bias, 0)
x1_2 = get_hyperplane_value(x0_2, clf.weights, clf.bias, 0)
x1_1_m = get_hyperplane_value(x0_1, clf.weights, clf.bias, -1)
x1_2_m = get_hyperplane_value(x0_2, clf.weights, clf.bias, -1)
x1_1_p = get_hyperplane_value(x0_1, clf.weights, clf.bias, 1)
x1_2_p = get_hyperplane_value(x0_2, clf.weights, clf.bias, 1)
ax.plot([x0_1, x0_2],[x1_1, x1_2], 'b--')
ax.plot([x0_1, x0_2],[x1_1_m, x1_2_m], 'k')
ax.plot([x0_1, x0_2],[x1_1_p, x1_2_p], 'k')
x1_min = np.amin(X[:,1])
x1_max = np.amax(X[:,1])
ax.set_ylim([x1_min-3,x1_max+3])
plt.show()
visualize_svm()
Fig. Output of SVM
얼굴 감지 — SVMc는 이미지의 일부를 얼굴과 비얼굴로 분류하고 얼굴 주위에 사각형 경계를 만듭니다.
텍스트 및 하이퍼텍스트 분류 — SVM은 텍스트 및 하이퍼텍스트 분류를 위한 유도 모델과 변환 모델을 모두 지원합니다. 기사를 별개의 그룹으로 분류하려면 학습 데이터가 필요합니다. 얻은 점수를 기준으로 분류한 다음 임계값과 대조합니다.
그림 분류 — SVM은 이미지 분류에 대한 검색 정확도를 향상시킵니다. 기존의 쿼리 기반 검색 전략에 비해 더 높은 정확도를 제공합니다.
단백질 분류와 암 분류는 생물 정보학의 두 가지 예입니다. SVM은 유전자, 유전자에 따른 환자 및 기타 생물학적 문제를 분류하는 데 사용됩니다.
단백질 원격 상동성 검출 및 단백질 접힘 검출을 위해 SVM 알고리즘을 적용합니다.
결론
Support Vector Machine은 기계 학습에서 분류를 위한 강력한 알고리즘입니다. 회귀 문제에도 사용할 수 있지만 주로 분류 목적으로 사용하는 것이 좋습니다. 선형 또는 비선형 데이터에 사용할 수 있으며 잘 작동합니다. 그러나 지도 학습 알고리즘이므로 레이블이 지정된 데이터가 필요합니다. 복잡한 데이터 세트보다는 작은 데이터 세트에서 가장 잘 작동합니다.
참조
서포트 벡터 머신푸네의 Vishwakarma Institute of Technology에서 인공 지능 및 데이터 과학(AI&DS) 학생들의 통계적 추론(SI)을 위한 가정 과제.
의해서 준비되었다:-
- 아진캬 마하잔
- 아디트야 보단카르
- 리야 다칼카르
- 딕샤 프라사드
- 시바니 마하잔