MNIST 이미지 셋 파일들을 이용하여 SVC 모델로 학습을 시켜보았다.
SVC(Support Vector Classifier)는 SVM(Support Vector Machine) 알고리즘을 기반으로 한 분류(Classification) 모델입니다.
서포트 벡터 머신은 지도 학습(Supervised Learning)에서 주로 사용되며, 데이터를 분류하는 경계를 찾는 데에 특화되어 있습니다.
< SVC 특징 >
최대 마진 분류: SVC는 데이터를 분류하는 결정 경계를 찾을 때, 가능한 한 최대 마진(Margin)을 가지도록 합니다.
마진은 결정 경계와 가장 가까운 데이터 샘플들 간의 거리를 의미하며, 이를 최대화함으로써 일반화 성능을 향상시킬 수 있습니다.
커널 기법: SVC는 비선형적인 데이터를 처리하기 위해 커널(Kernel) 기법을 사용합니다.
커널은 데이터를 고차원 특징 공간으로 매핑하여 선형적으로 분리할 수 있도록 합니다.
대표적인 커널 함수로는 선형 커널, 다항식 커널, 가우시안(RBF) 커널 등이 있습니다.
서포트 벡터: SVC는 분류 결정 경계에 가장 가까이 위치한 데이터 샘플들을 서포트 벡터(Support Vector)라고 부릅니다.
이들 데이터 샘플들은 분류 결정에 영향을 미치는 주요한 역할을 합니다.
SVC는 이 서포트 벡터들을 효율적으로 찾아내어 분류를 수행합니다.
SVC는 이진 분류(Binary Classification)와 다중 클래스 분류(Multi-Class Classification) 문제에 모두 사용될 수 있습니다.
또한, SVM은 분류 뿐만 아니라 회귀(Regression), 이상치 탐지(Outlier Detection),
차원 축소(Dimensionality Reduction) 등 다양한 문제에도 적용될 수 있습니다.
//
// MINST - SVC(SUPPORT VECTOR CLASSIFIER)
//
// Created by netcanis on 2023/07/20.
//
import numpy as np
import pickle
import dataset_loader
import model_tester
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
# Load MNIST data
training_images, training_labels, test_images, test_labels = dataset_loader.load_dataset("data/MNIST")
# Reshape the data
# 배열의 차원을 변경하여 크기를 자동으로 변경한다. (-1은 해당 차원의 크기를 자동으로 조정하라는 뜻)
training_images = np.reshape(training_images, (len(training_images), -1))
test_images = np.reshape(test_images, (len(test_images), -1))
# Print the image shapes
# reshape - Training Images shape: (60000, 784)
# reshape - Test Images shape: (10000, 784)
print("reshape - Training Images shape:", training_images.shape)
print("reshape - Test Images shape:", test_images.shape)
# Assign images and labels to x_train, y_train, x_test, y_test
x_train, y_train = training_images, training_labels
x_test, y_test = test_images, test_labels
#
# SVC(Support Vector Classifier) 파일 저장.
#
print("Training in progress... Please wait.")
# Train the model
# 'verbose=True'를 설정하여 진행상태 로그 출력.
model = SVC(verbose=True)
model.fit(x_train, y_train)
# Evaluate the model
score = model.score(x_test, y_test)
print('Accuracy:', score)
# Save the model (Support Vector Machines)
with open("svm_mnist_model.pkl", "wb") as file:
pickle.dump(model, file)
print("Save the vm_mnist_model.pkl.")
#
# TEST
#
model_file = "svm_mnist_model.pkl"
model_tester.test_model("data/MNIST", model_file)
# Error rate: 2.08%
2023.07.19 - [AI] - MNIST 데이터셋 다운로드
2023.07.19 - [AI] - MNIST 데이터셋을 이미지 파일로 복원
2023.07.19 - [AI] - MNIST 데이터셋 로더
2023.07.19 - [AI] - MNIST 모델 테스터
2023.07.19 - [AI] - MINST - SVC(Support Vector Classifier)
2023.07.19 - [AI] - MNIST - RandomForestClassifier
2023.07.19 - [AI] - MNIST - Keras
2023.07.19 - [AI] - MNIST - TensorFlowLite
'개발 > AI,ML,ALGORITHM' 카테고리의 다른 글
MNIST - Keras (0) | 2023.07.19 |
---|---|
MNIST - RandomForestClassifier (0) | 2023.07.19 |
MNIST 모델 테스터 (0) | 2023.07.19 |
MNIST 데이터셋 로더 (0) | 2023.07.19 |
MNIST 데이터셋을 이미지 파일로 복원 (0) | 2023.07.19 |