SVM은 "Support Vector Machine(서포트 벡터 머신)"의 약자로, 패턴 인식, 분류 및 회귀 분석 등의 머신러닝 문제에 널리 사용되는 지도 학습 알고리즘입니다.
SVM은 주어진 데이터를 고차원 공간으로 매핑하여 데이터를 분류하는 결정 경계를 찾는 기법입니다. 이를 위해 SVM은 데이터 포인트들을 서로 구분하는 최대 마진(Margin)을 갖는 결정 경계를 찾는 것을 목표로 합니다. 이 최대 마진을 갖는 결정 경계는 데이터를 더욱 정확하게 분류할 수 있는 경계라고 볼 수 있습니다.
SVM은 다음과 같은 주요 특징을 갖습니다:
선형 분류와 비선형 분류: SVM은 선형 분류 문제에서 뛰어난 성능을 발휘할 수 있습니다. 그러나 데이터가 선형적으로 분리되지 않는 경우에도 커널 트릭(kernel trick)을 사용하여 비선형 결정 경계를 생성할 수 있습니다. 커널 트릭은 데이터를 고차원 공간으로 매핑하여 선형 분류를 수행하는 것보다 효율적인 방법입니다.
서포트 벡터: SVM은 분류 경계와 가장 가까이 위치한 데이터 포인트들을 "서포트 벡터"라고 부릅니다. 이 서포트 벡터들이 결정 경계를 정의하는 데 중요한 역할을 합니다. SVM은 오직 서포트 벡터들만을 사용하여 결정 경계를 구성하고, 이를 통해 계산 및 예측 과정에서 효율성을 높입니다.
커널 함수: SVM은 커널 함수를 사용하여 데이터를 고차원 공간으로 매핑합니다. 커널 함수는 입력 데이터의 특성을 적절하게 변환하여 선형 불가능한 문제를 해결할 수 있도록 돕습니다. 대표적인 커널 함수로는 선형 커널, 다항식 커널, 가우시안(RBF) 커널 등이 있습니다.
머신러닝에서 "feature space(특성 공간)"란 데이터의 특성을 나타내는 변수들로 이루어진 공간을 의미합니다. 각 데이터 포인트는 이 특성 공간 상의 한 점으로 표현됩니다.
데이터의 특성은 문제에 따라 다르지만, 일반적으로 숫자, 범주형 값, 텍스트, 이미지 등으로 표현됩니다. 이러한 특성들은 모델이 패턴을 학습하고 예측을 수행하는 데 사용됩니다.
예를 들어, 이미지 분류 문제에서 각 이미지는 특성 공간 상의 한 점으로 표현됩니다. 이 특성 공간은 이미지의 각 픽셀 값을 차원으로 갖는 공간일 수 있습니다. 따라서 64x64 크기의 이미지는 4,096 차원의 특성 공간으로 표현될 수 있습니다.
Feature space의 차원 수는 데이터셋에 따라 다를 수 있으며, 머신러닝 알고리즘의 성능과 학습의 복잡도에 영향을 줄 수 있습니다. 때로는 feature space의 차원을 줄이는 차원 축소 기법을 사용하기도 합니다. 이를 통해 고차원 데이터를 저차원의 특성 공간으로 매핑하여 계산 및 시각화의 효율성을 높일 수 있습니다.
Feature space 그림 설명
위의 그림은 2차원 feature space를 나타냅니다. 여기에는 두 개의 특성, Feature 1과 Feature 2가 있습니다. 각각의 데이터 포인트는 특성 공간 상의 한 점으로 표현됩니다.
예를 들어, (3, 2)는 Feature 1의 값이 3이고 Feature 2의 값이 2인 데이터 포인트를 나타냅니다. 마찬가지로, (1, 4), (5, 6), (2, 1)은 각각 다른 데이터 포인트를 나타냅니다.
머신러닝 모델은 이러한 데이터 포인트들을 분석하여 패턴을 학습하고 예측을 수행합니다. Feature space에서는 데이터 포인트들 간의 상대적인 위치와 패턴을 이해하여 결정 경계를 학습할 수 있습니다. 이렇게 feature space를 이해하면, 머신러닝 모델이 어떻게 데이터를 분류하고 예측하는지 더 잘 이해할 수 있습니다.
Feature space에서 feature 간의 distance 측정 방법
1. 유클리디안 거리(Euclidean distance): 유클리디안 거리는 feature space에서 가장 흔히 사용되는 거리 측정 방법입니다. 두 점 A(x1, y1)와 B(x2, y2) 사이의 유클리디안 거리는 아래와 같이 계산됩니다.
예를 들어, 2차원 feature space에서 (3, 2)와 (1, 4) 사이의 거리를 계산하려면 다음과 같이 계산합니다:
distance = sqrt((x2 - x1)^2 + (y2 - y1)^2)
2. 맨하탄 거리(Manhattan distance): 맨하탄 거리는 두 점 사이의 가로 및 세로 방향의 거리를 합산하여 계산하는 방법입니다. 맨하탄 거리는 두 점 사이의 "도시 블록" 거리라고도 불립니다. 두 점 A(x1, y1)와 B(x2, y2) 사이의 맨하탄 거리는 아래와 같이 계산됩니다.
distance = |1 - 3| + |4 - 2| = 2 + 2 = 4
예를 들어, 2차원 feature space에서 (3, 2)와 (1, 4) 사이의 거리를 맨하탄 거리로 계산하면 다음과 같습니다:
distance = |x2 - x1| + |y2 - y1|
3. 코사인 유사도(Cosine similarity): 코사인 유사도는 벡터 간의 방향성을 고려하여 거리를 측정하는 방법입니다. 특히, 희소한(high-dimensional sparse) 벡터에 유용하게 사용됩니다. 두 벡터 A와 B 사이의 코사인 유사도는 아래와 같이 계산됩니다.
similarity = dot(A, B) / (norm(A) * norm(B))
여기서 **dot(A, B)**는 벡터 A와 B의 내적(dot product)을 나타내며, **norm(A)**와 **norm(B)**는 각각 벡터 A와 B의 노름(norm)을 나타냅니다.
추가 지식
sqrt(): x의 제곱근의 비음수 값을 계산합니다. 리턴 값으로는 제곱근 결과를 리턴합니다.x가 음수인 경우, 함수는errno을EDOM으로 설정하고0을 리턴합니다.
conda install kaggle로 kaggle 설치 후 kaggle api를 통해 쉽게 kaggle 데이터셋을 다운 받을려고 하는데 kaggle 호출이 되지 않는 상황입니다. 설치한 위치가 model 개발하고 있는 폴더여서 kaggle.json 파일 위치도 model 폴더 안에 넣어두었는데 그게 문제 였습니다.