News & Events
[Machine Learning] 31. SVM (Support Vector Machine) 사용하기
- 2019년 1월 14일
- Posted by: 인사이트캠퍼스
- Category: 금융/AI/IT 기사
![](https://insightcampus.co.kr/wp-content/uploads/2019/01/Frame-3-19.png)
SVM을 사용할때 선택해야 하는 내용이 두가지 있습니다.
하나는 prarmeter C를 선택해야 하고 또 하나는 kernel을 선택해야 합니다. 커널이 없는 경우는 linear kernel이라고 하며 이것은 f 함수(similarity function)을 사용하지 않고 x features 를 사용하는 것입니다. 주로 n 이 크고 m이 작은 즉 features는 많은데 dataset 사이즈가 적은 경우에 사용이 됩니다.
그리고 우리가 배운 Gaussian kernel을 사용하는 경우에는 앞에서 배운것처럼 아래 그림의 하단 공식과 같이 표현이 가능하며 이때에는 sigma^2 값을 선택해야 합니다. 이것은 n 이 작고 m 이 큰 non-linear 에서 유용하게 사용이 됩니다.
![](https://insightcampus.co.kr/wp-content/uploads/2021/02/1-2.png)
SVM에서 Kernel function은 f = k(x1, x2)로 표현이 되며 x2가 landmark 역할을 합니다. 이것을 수학적인 공식으로 표현하면 아래 그림의 공식과 같이 되며 분자에 식을 다시 하단의 공식과 같이 풀어 쓸 수 있습니다.
||x – l||^2 = (x1-l1)^2 + (x2-l2)^2 + … + (xn-ln)^2
이것을 이용해서 Gaussian Kernel을 이용하기 전에 각 features들을 scaling을 해주어야 합니다. 각각의 features들의 수치가 단위에 따라서 다른 크기를 가지기 때문입니다.
![](https://insightcampus.co.kr/wp-content/uploads/2021/02/2-2.png)
보편적으로 SVM에서 liner kernel 이나 Gaussian kernel을 사용합니다. 이를 구현할때 Mercer’s Theorem 의 조건을 만족하기만 하면 SVM 패키지들은 global minimum을 찾는 것을 보장해주도록 여러가지 수학적인 tricks을 사용하도록 되어있습니다. 이외에도 다양한 다른 kernel들이 존재하는데 몇가지 간단하게 알아보겠습니다.
polynomial kernel 은 기본 공식에서 상수값이 더해지고 고차항의 승수가 적용이 됩니다. 아래 그림의 중간부분의 공식과 같습니다. 이 이들 두가지를 선택해야 하며 공식으로 표현하면 다음과 같습니다.
(xT l+Constant) ^ degree
String kernel은 입력값이 text string인 경우에 사용이 되며 문자열들을 분류할때 사용이 됩니다.
그외 다른 kernel들도 있지만 Gaussian Kernel이 가장 좋은 성능을 나타내기에 그다지 유용하게 사용할 일이 없다고 합니다.
![](https://insightcampus.co.kr/wp-content/uploads/2021/02/3-2.png)
당연하겠지만 SVM도 multi-class classifacation이 가능합니다. 비슷한 방식으로 one vs all method를 사용하고 있습니다. y의 값이 1에서 부터 k 까지 존재한다면 세타도 1에서 부터 k 까지 생성이 되며 각각의 세타는 y의 값과 매칭이 됩니다.
![](https://insightcampus.co.kr/wp-content/uploads/2021/02/4-2.png)
features의 수인 n과 dataset 사이즈인 m에 따라서 알고리즘을 적절하게 선택하여 적용하는 것이 좋습니다.
만약에 n 이 m에 비해서 큰 dataset의 경우에는 logistic regression 이나 SVM linear kernel을 사용하는 것이 좋습니다. (n = 10,000, m = 10~1000)
또 n 이 작고 m 이 중간정도 크기의 dataset의 경우에는 SVM Gaussian kernel을 사용하는 것이 좋습니다. (n = 1~1000, m = 10~10,000)
마지막으로 n 이 작고 m 이 큰 dataset의 경우에는 더 많은 features을 추가하고 logistic regression 이나 SVM linear kernel을 사용하는 것이 좋습니다.
이렇게 기본적으로 logsitic regression 과 SVM linear kernel을 비슷한 방식으로 동작으로 하며 성능도 비슷합니다. NN도 가능하지만 SVM이 더 좋은 성능을 나타냅니다. 그리고 이전에도 살펴보았듯이 알고리즘의 선택이 더 좋은 결과를 결정하는 것은 아닙니다. 더 많은 데이터와 적절한 features를 사용하고 얼마나 error analysis를 잘하는가, 그리고 debugging을 잘 활용하는 것이 더 중요함을 기억해야 하겠습니다.
![](https://insightcampus.co.kr/wp-content/uploads/2021/02/5-2.png)