서포트 벡터 머신(SVM)은 분류선(Maximum Margin Classifer)을 기준으로 데이터를 분류할수있다.

# 분류선에 제일 근접한 데이터를, 가장 큰 마진으로 설정하는 선으로 결정한다.
# 이를 통해 분류하기 애매한것들을 쉽게 분류할수있다. (예시: 노란 사과와 오렌지, 초록색 오렌지와 초록색 사과 등)
df=

먼저 전처리과정을 진행한다.
df.isna().sum() #Nan 없음
X = df.loc[:,'Age':'EstimatedSalary']
y = df['Purchased']
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=3)
SVM을 통해 분류작업을 하기위해 SVC를 사용한다.
from sklearn.svm import SVC
classifier = SVC(kernel= 'linear',random_state=3)
# kernel 파라미터를 리니어로 설정했다.
SVM 인공지능을 학습시킨다.
classifier.fit(X_train,y_train)
이제 성능을 확인해보자
먼저 컨퓨전 매트릭스를 나타내고
in:
y_pred = classifier.predict(X_test)
from sklearn.metrics import confusion_matrix, accuracy_score
cm = confusion_matrix(y_test,y_pred)
cm
out:
array([[61, 4],
[13, 22]], dtype=int64)
차트로 컨퓨전 매트릭스를 그린다.
in:
import seaborn as sb
sb.heatmap(data=cm, annot=True, cmap='RdPu')
plt.show()
out:

accuracy_score로 정확도를 나타내자
in:
accuracy_score(y_test,y_pred)
out:
0.83
# SVM을 리니어 커널로 설정했더니 정확도가 83%이 나왔다.
선형으로 분리하기 어렵거나 정확도가 떨어질때, pbf커널을 사용해보자



# 원형으로 안쪽과 바깥쪽으로 서로 다른 데이터셋이 있어 단순히 선만으로 분류하는것은 어렵다.
# 따라서 3차원으로 구분하여 분류한다.
커널을 rbf로 설정하여 다시 모델링해보자.
classifier2 = SVC(kernel= 'rbf', random_state= 3)
classifier2.fit(X_train,y_train)
이제 정확도를 평가해보자
in:
y_pred2 = classifier2.predict(X_test)
accuracy_score(y_test,y_pred2)
out:
0.89
# 리니어 커널을 했을때보다 약 6%p 더 높은 89%가 나왔다.
# 이 데이터셋은 rbf로 커널을 설정했을때 더 높은 정확도를 보이는것을 알수있다.
각 커널별 SVM을 차트로 나타내면:
리니어 커널 SVM

rbf 커널 SVM

# rbf 커널로 설정한 SVM은 조금 더 굴곡진 차트로 생성된것을 볼수있다.
'머신러닝' 카테고리의 다른 글
| [머신러닝] Decision Tree (0) | 2022.05.09 |
|---|---|
| [머신러닝] sklearn.datasets, hyper parameter, GridSearchCV (0) | 2022.05.09 |
| [머신러닝] K-Nearest Neighbor (KNN) (1) | 2022.05.06 |
| [머신러닝] Logistic Regression, Dealing NaN (0) | 2022.05.06 |
| [머신러닝] Multiple Linear Regression: predict (0) | 2022.05.06 |
댓글