Support Vector Machine(SVM) 모델 : iris dataset

November·2024년 10월 12일
post-thumbnail

SVM

두 클래스 간의 가장 넓은 경계를 만드는 hyperplane을 찾는 것
hyperplane에서 가장 가까운 데이터 포인트 = support vector 를 기준으로 최적화

linear: 데이터가 선형으로 분류 가능하면 linear한 hyperplane 사용하여 데이터 분리
non-linear: 비선형구조일 때, Kernel Trick 사용하여 데이터를 고차원 공간으로 변환

Iris 데이터셋 활용

1. 데이터 로드 & 분할하기

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris_dataset = load_iris()
X = iris_dataset.data
y = iris_dataset.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

2. Scailing

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

3. linear 커널 SVM

from sklearn.svm import SVC

linear_svm = SVC(kernel='linear')
linear_svm.fit(X_train, y_train)

y_pred = linear_svm.predict(X_test)
from sklearn.metrics import accuracy_score

accuracy_linear = accuracy_score(y_test, y_pred)
print(f"Linear Kernel Accuracy: {accuracy_linear:.4f}")

4. Cross validation

from sklearn.model_selection import cross_val_score

linear_accuracies = cross_val_score(linear_svm, X_train, y_train, cv=5)
print(f"Linear Kernel 5-Fold Accuracies: {linear_accuracies}")
print(f"Mean Linear Kernel Accuracy: {linear_accuracies.mean():.4f}")

데이터를 5개의 fold로 나누고 모델 각각 평가 후 평균 성능 계산

5. RBF 커널 SVM

rbf_svm = SVC(kernel='rbf', C=1, gamma=0.01)
rbf_svm.fit(X_train, y_train)

y_pred_rbf = rbf_svm.predict(X_test)
accuracy_rbf = accuracy_score(y_test, y_pred_rbf)
print(f"RBF Kernel Accuracy: {accuracy_rbf:.4f}")

rbf_accuracies = cross_val_score(rbf_svm, X_train, y_train, cv=5)
print(f"RBF Kernel 5-Fold Accuracies: {rbf_accuracies}")
print(f"Mean RBF Kernel Accuracy: {rbf_accuracies.mean():.4f}")

6. 하이퍼파라미터 튜닝 & 출력

from sklearn.model_selection import GridSearchCV

param_grid = {
    'kernel': ['rbf', 'poly', 'sigmoid'],
    'C': [0.1, 1, 10, 100],
    'gamma': [1, 0.1, 0.01, 0.001]
}

grid_search = GridSearchCV(SVC(), param_grid, cv=5, verbose=1)
grid_search.fit(X_train, y_train)

print(f"Best Parameters: {grid_search.best_params_}")
best_model = grid_search.best_estimator_

y_pred_best = best_model.predict(X_test)
best_accuracy = accuracy_score(y_test, y_pred_best)
print(f"Best Model Accuracy: {best_accuracy:.4f}")

GridSearchCV: 주어진 하이퍼파라미터 조합을 사용하여 최적의 모델 탐색함
cv=5: 5-fold cross validation
verbose=1: 검색 과정을 출력

0개의 댓글