Support Vector Machine
다음과 같이 두개의 그룹으로 나누어진 데이터가 있다고 가정할때 다양한 선을 그어서 그 경계를 설정할 수 있다.
이때 SVM은 아래와 같이 양쪽 그룹에 붙혀서 그릴 수 있는 한계선 간의 거리가 최대치가 되는 경우(Maximum Margin)를 찾는다.
위 그림의 개념들을 좀더 자세히 보면 Maximum Margin을 결정하는 그룹의 끝에 위치하게 되는 data를 Support Vectors라고 부른다. 위의 두 Support Vectors 점들이 결국 SVM 알고리즘을 결정하는 결정적 요인이 된다. Maximum Margin을 기준으로 중심에 그려지는 선은 Maximum Margin Hyperplane이라고 불린다. Hyperplane은 초평면인데 선이 평면이라고 불리는 이유는 실제 모델은 변수가 훨씬 많아서 고차원이기 때문에 경계가 평면이 되기 때문이다.
위는 SVM의 특징을 보여주는 사례이다. 사과와 오렌지를 구분해야할때 SVM은 전형적인 사과와 오렌지들을 기준으로 잡는 것이 아니라 위와 같이 가장 오렌지 같은 사과와 가장 사과같은 오렌지를 기준으로 삼아서 모델을 구성한다. 이점이 다른 머신러닝 알고리즘과 구분되는 가장 큰 특징이다.
Model
이전의 모델들과 training 부분을 제외하고는 차이점이 존재하지 않는다.
# Support Vector Machine (SVM)
# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# Training the SVM model on the Training set
from sklearn.svm import SVC
classifier = SVC(kernel = 'linear', random_state = 0)
classifier.fit(X_train, y_train)
# Predicting a new result
print(classifier.predict(sc.transform([[30,87000]])))
[0]
# Predicting the Test set results
y_pred = classifier.predict(X_test)
print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))
[[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[1 1]
[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[0 0]
[1 1]
[0 0]
# Making the Confusion Matrix
from sklearn.metrics import confusion_matrix, accuracy_score
cm = confusion_matrix(y_test, y_pred)
print(cm)
accuracy_score(y_test, y_pred)
[[66 2]
[ 8 24]]
0.9
SVC()의 parameter로는 커널과 random_state만 입력해준다. 커널은 우선 고전적인 모델을 보기 위해 linear를 입력하였다.
또한 confusion matrix를 통해 정확도가 0.9여서 Logistic보다는 좋은 결과를, K-NN보다는 안좋은 결과가 나왔음을 알 수 있다.
시각화 코드는 완전히 똑같기 때문에 다시 쓰지 않도록 하고 결과만 살펴보고자 한다.
'Drawing (AI) > MachineLearning' 카테고리의 다른 글
Udemy - 머신러닝의 모든 것 (Kernel SVM - 2) (0) | 2023.04.30 |
---|---|
Udemy - 머신러닝의 모든 것 (Kernel SVM - 1) (0) | 2023.04.26 |
Udemy - 머신러닝의 모든 것 (K-NN) (0) | 2023.03.31 |
Udemy - 머신러닝의 모든 것 (로지스틱 회귀) (1) | 2023.03.26 |
Udemy - 머신러닝의 모든 것 (회귀 모델 선택) (0) | 2023.03.23 |