연습문제
1. 서포트 벡터 머신의 근본 아이디어는 무엇인가?
첫번째는 데이터를 분류하는 decision boundary로부터 두 클래스가 많이 떨어져 있는, 즉 마진이 최대인 선을 찾는 것이다. 소프트 마진 분류를 수행할 때는 SVM이 두 클래스를 완벽하게 나누는 것과 가장 넓은 도로를 만드는 것 사이에 절충안을 찾는데 즉, 몇개의 샘플은 도로 안에 놓일 수 있다는 점이다.
두번째는 커널을 사용하여 새로운 feature를 추가하지 않고도 Unlinearly Separable data에 대해서도 분류가 가능하다는 점이다.
2. 서포트 벡터가 무엇인가?
SVM이 훈련된 후에 경계를 포함해 도로에 놓인 어떤 샘플을 말하는데 이것에 의해 decision boundary가 결정된다. 예측을 계산할 때는 전체 훈련 셋이 아닌 서포트 벡터 데이터만 사용되기 때문에 속도가 비교적 빠르다.
3. svm을 사용할 때 입력값의 스케일이 왜 중요한가요?
scaling의 장점은 수치적으로 작은 범위를 갖는 변수에 비해 큰 범위를 갖는 변수가 중요한 특성으로 선택되는 것을 피하는데 있다. 또한 계산상의 어려움을 피할 수 있다. Kernel value는 대부분 feature vector의 내적(inner product)에 의존하는데, 수치가 큰 경우 계산상의 문제를 유발할 수 있다.
4. svm 분류기가 샘플을 분류할 때 신뢰도 점수와 확률을 출력할 수 있나요?
로지스틱 회귀 분류기와 달리 클래스에 대한 확률을 제공하지 않는다. 그러나 사이킷런의 SVC() 모델은 probability=True 로 매개변수를 지정하면 predict_proba() 메서드를 제공한다. 확률을 계산할 수 있다는 것은 '신뢰도' 를 구할 수 있다는 것을 의미하므로 이에 한하여 신뢰도 또한 출력가능하다.
5. 수백만 개의 샘플과 수백 개의 특성을 가진 훈련 세트에 svm 모델을 훈련시키려면 원 문제와 쌍대 문제 중 어떤 것을 사용해야 하나요?
위와 같이 훈련 샘플 수가 특성 개수보다 클 때는 쌍대 문제보다 원 문제를 푸는 것이 더 빠르기 때문에 원 문제를 사용하는 것이 더욱 효율적이다. 반대의 경우 원 문제에서는 적용이 안 되는 커널 트릭을 가능하게 한다는 장점이 있지만 위의 경우는 필요가 없을 것으로 보인다.
6. RBF 커널을 사용해 SVM 분류기를 훈련시켰더니 훈련 세트에 과소적합된 것 같습니다. r(gamma) 를 증가시켜야 할까요, 감소시켜야 할까요? C의 경우는 어떤가요?
underfitting은 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못할 때 발생한다.
따라서 다음과 같은 하이퍼파라미터 튜닝이 필요하다.
C: 값을 높인다.
C는 outlier를 허용할 것인지 margin을 결정하는 파라미터로서, 값이 높을 수록 hard margin(outlier를 margin 안에 허용안함), 값이 낮을수록 soft margin(outlier margin안에 허용함) 이라고 한다. 따라서 underfitting된 경우 모델이 margin 안에 outlier를 너그럽게 허용함으로써 대충대충 학습한 것에 대한 문제를 생각해볼 수 있다는 것이다.
gamma :값을 높인다.
gamma는 훈련 샘플이 결정 경계에 미치는 영향을 조절하는 파라미터이므로 값을 높여서 훈련 샘플의 결정 경계에 대한 가중치를 높여야한다.
#underfitting 발생: 규제가 너무 크다 -> 규제를 줄인다.
여기서 규제는 outlier에 대해 허용을 안한 것, sample data의 영향력에 대한 규제를 말하는 건가??? 이런 규제를 줄인다는 것??
9. MNIST 데이터셋에 SVM 분류기를 훈련시켜보세요. SVM 분류기는 이진 분류기라서 OvR 전략을 사용해 10개의 숫자를 분류해야 합니다. 처리 속도르 높이기 위해 작은 검증 세트로 하이퍼파라미터를 조정하는 것이 좋습니다. 어느 정도까지 정확도를 높일 수 있나요?
'programming > SW Academy' 카테고리의 다른 글
SVM::모델 성능평가 (0) | 2020.09.23 |
---|---|
u c os 2 ::개념 (0) | 2020.08.26 |
ocr training::file IO (0) | 2020.07.31 |
MFC::dialog (0) | 2020.07.09 |
Fourier Transform (0) | 2020.06.25 |