Support Vector Machine이란 머신러닝 예측 기법중 하나로 딥러닝이 나오긴전엔 높은 정확도를 가진 기법이 이었다. 무엇이 Support Vector Machine의 정확도를 끌어올렸는지 알아보자
Support Vector Machine의 작동원리는 이러하다
만약 인공지능보고 물건을 주고 사과인지 오렌지인지 분석하라 해보자
이렇게 좀 구별짓게 생긴게 있는가 반면
이렇게 오렌지 빛이 나는 사과가 있다 해보자 우리 사람은 "아 이거 좀 그래도 사과 같은데?" 이렇게 생각할 수 있지만 컴퓨터는 이미 사과와 오렌지의 기본 데이터로만 판단 할것이다. 그래서 사람보다 더욱더 구별하기 힘들것이다.
이렇게 완전 애매한 데이터는 SVM(Support Vector Machine)으로 구별한다.
빨간 점이 사과의 데이터이고 파란점이 오렌지의 데이터라 하자 서로 평화롭게 똑같은 영역에 정확한 거리로써 데이터가 구별되어 있다. 그런데 아까 그 애매한 사과 데이터가 들어가면 SVM은 이렇게 구별짓는다.
두 데이터 모임의 가장 가까운 데이터의 거리를 구하고 그 거리의 딱 중간에 수직으로 선을 긋는다. 선을 그을때는 기울기가 여러가지가 나오겠지만 SVM은 margin의 최대값으로 기울기 정해 선을 긋는다.
그림에서 보는 저 Maximum Margin값으로 SVM선을 긋게 된다. 그럼 저 선을 기준으로 새로운 데이터는 좀 더 가까운영역에 데이터가 분류되게 된다.
이제 코드를 통해 구현해보자.
데이터를 불러오고 데이터를 전처리하는 작업은 기존에 인공지능 방식과 동일해서 인공지능을 구현하는 것부터 보여주겠다.
#svm함수 호출
from sklearn.svm import SVC
#함수를 변수에 저장하는데 파라미터는 커넬 형식
classifier = SVC(kernel='linear',random_state=1)
classifier.fit(X_train,y_train)
y_pred=classifier.predict(X_test)
이렇게 나오면 데이터 학습이 완료된것인데 한가지 특이사항은 파라미터인 커넬이다. 이 커넬은 SVM의 형식을 의미하며 데이터 상에 선을 긋는 방법이 딱 구별지어 있지 않았을때 3차원으로 구별하는 형식이 따로 있기 때문에 형식을 어떤것을 쓸지 묻는 것이다.
이제 confusionmatrix로 시각화 하고 정확도를 구해보자
#confusionmatrix와 정확도 함수 둘다 호출
from sklearn.metrics import confusion_matrix,accuracy_score
cm = confusion_matrix(y_test, y_pred)
import matplotlib.pyplot as plt
import seaborn as sb
sb.heatmap(data=cm,annot= True, cmap='RdPu',linewidths= 0.7)
plt.show()
#정확도 구하기
accuracy_score(y_test,y_pred)
>>> 0.81
정확도는 81%가 나온다.
SVM의 다른 커넬 형식에 대해 알아보자 기존 코드와 동일한데 커넬값만 바뀐다. 이렇게 하면 정확도도 바뀌게 된다.
#커넬 형식 rbf방식
classifier2=SVC(kernel='rbf',random_state=1)
classifier2.fit(X_train,y_train)
y_pred2 = classifier2.predict(X_test)
confusionmatrix로 시각화 하고 정확도를 구해보면
#정확도
accuracy_score(y_test,y_pred2)
>>> 0.88
정확도는 88%가 나왔다. 데이터는 같은데 방식 바뀌자 정확도가 향상 된것이다.
'머신러닝' 카테고리의 다른 글
머신러닝(14) K-Means Clustering으로 데이터를 분류하여 그룹화하자 (0) | 2022.12.05 |
---|---|
머신러닝(13) Decision Tree로 데이터를 예측해보자 (0) | 2022.12.05 |
머신러닝(11) K-NN으로 데이터를 예측해보자 (0) | 2022.12.02 |
머신러닝(7) Linear Regression으로 데이터 예측하기 (0) | 2022.12.01 |
머신러닝(6) 데이터 전처리 종합 (0) | 2022.12.01 |