본문 바로가기
study

지도학습 : 커널 서포트 벡터 머신

by 나는야오리 2020. 4. 15.

지도학습의 머신러능 알고리즘에 대해 알아보고 정리를 해보았다. 출처는 아래 남겨두었다. 

5. 커널 서포트 벡터 머신

보통 SVM이라고 부른다. 입력 데이터에서 단순한 초평면으로 정의되지 않는 더 복잡한 모델을 만들 수 있도록 확장한 것이다.

from sklearn.datasets import make_blobs
from sklearn.svm import LinearSVC

X, y = make_blobs(centers=4, random_state=8)
y = y%2

linear_svm = LinearSVC().fit(X,y)

mglearn.plots.plot_2d_separator(linear_svm, X)
mglearn.discrete_scatter(X[:,0], X[:,1], y)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")

위 이미지에서 보듯이 선형 모델은 저차원 데이터셋에서 매우 제한적이다. 또한 분류를 위한 선형 모델을 직선으로만 데이터 포인트를 나눌 수 있어서 위와 같은 데이터셋에서는 맞지 않는다. 따라서 특성끼리 곱하거나 특정 특성을 제곱하는 방식으로 새로운 특성을 추가해준다.  아래는 특성 1을 제곱한 특성 3을 추가하여 3차원 산점도로 표현한 것이다.

linear_svm_3d = LinearSVC().fit(X_new, y)
coef, intercept = linear_svm_3d.coef_.ravel(), linear_svm_3d.intercept_

figure = plt.figure()
ax = Axes3D(figure, elev = -1612, azim =-26)
xx = np.linspace(X_new[:,0].min() - 2, X_new[:,0].max()+2, 50)
yy = np.linspace(X_new[:,1].min() - 2, X_new[:,1].max()+2, 50)

XX, YY = np.meshgrid(xx,yy)
ZZ = (coef[0] * XX + coef[1] * YY + intercept) / -coef[2]
ax.plot_surface(XX, YY, ZZ, rstride =8, cstride =8 , alpha=0.3)
ax.scatter(X_new[mask,0], X_new[mask,1], X_new[mask,2], c='b',
          cmap=mglearn.cm2, s=60, edgecolor='k')

ax.scatter(X_new[~mask,0], X_new[~mask,1], X_new[~mask,2], c='r',
          cmap=mglearn.cm2, s=60, edgecolor='k', marker = '^')

ax.set_xlabel("Feature 0")
ax.set_ylabel("Feature 1")
ax.set_zlabel("Feature 1**2")

새로운 데이터셋에서는 선형 모델과 3차원 공간의 평면을 사용해 두 클래스를 구분할 수 있다. 이 때 SVM 모델은 더 이상 선형이 아니라 타원에 가깝다.

출처

http://www.hanbit.co.kr/store/books/look.php?p_code=B5750278775

 

파이썬 라이브러리를 활용한 머신러닝(번역개정판) : 사이킷런 핵심 개발자가 쓴 머신러닝과 데이터 과학 실무서

현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(scikit-learn)과 같은 훌륭한 머신러닝 라이브러리가 복잡하고 난해한 작업을 직관적인 인터페이스로 감싸주는 덕분이죠. 이 책에서는 사이킷런의 핵심 개발자가 복잡한 수학을 동원하지 않고 실용적으로 머신러닝을 구축하는 모든 단계를 설명합니다. 미적분, 선형대수, 확률 이론을 공부하지 않았어도 이 책을 통해 머신러닝을 활용할 수 있게

www.hanbit.co.kr

댓글0