본문 바로가기

study

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

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

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