본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python | 분석 | SVM(Support Vector Machine) (2) + 하루끝(20240131)

728x90
반응형

연습문제

iris 데이터를 사용하여 SVC 모형으로 비선형성을 강화시키면서 결정경계를 시각화 하여라.

단, iris의 setosa 클래스는 제외하며 petal 변수들만 고려하여 fitting 할 것.

 

 

1. 데이터 불러오기

 

 

 

 

2. 분포 형태 시각화

 

 

 

 

 

3. MinMax Scaling

svm은 스케일링을 필요로 하는 모형이므로 변수 스케일링을 진행한다.

MInMax Scaling 공식은

(X - Xmin()) / (Xmax() - Xmin())

 

 

 

만일 standard scaling 을 사용하고 싶다면,

f_standard = lambda x: (x - x.mean()) / s.std()  

공식을 사용하여, 

DataFrame(X).apply(f_standard, axis = 0).values 

로 진행하면 되겠다.

 

 

 

4. svm 모델 적용(linearSVC, SVC) 및 결정경계 시각화

 

 

LinearSVC와 SVC 두 모형을 로드 시켰는데, LinearSVC는 완전 선형 모델이고, SVC는 비선형성을 강화시킬 수 있는 모형이다. 실무에서는 두 번째 것을 많이 사용한다.

 

 

비선형성을 강화시키는 방법은 두 가지가 있다.

1. C라는 매개변수로 통제

비선형성을 강화시키는 매개변수이다.

2. 차원의 확장

차원을 확장시킴으로 인하여 선형성을 유지한 채 분류규칙을 만드는 것을 커널 트릭이라고 한다.

지난 시간에 2차원 데이터를 3차원으로 확장하기 위하여 한 변수를 제곱하여 변수 추가를 한 적이 있었다. 그러나 매번 수동으로 가지고 있는 변수들을 변형시켜가면서 고차원 데이터로 만드는 것은 쉽지 않다. 어떤 변수를 제곱해야 하는지도 알 수 없으며, 제곱이 아닌 세제곱일 수도 있겠고, 굉장히 많은 커스텀이 발생한다. 그래서 커널트릭이라는 장치를 도입하게 된 것이다. 고차원 맵핑에 필요한 함수라고 생각하면 되겠다.

 

 

결정경계의 비선형성 강화

 

 

 

결졍 경계의 비선형성 보다 완화

 

오분류 데이터들의 오분류를 허용하면 선형 경계, 오분류를 허용하지 않으면 비선형 경계가 형성된다. 즉 분류 경계 근처의 변수들의 가중치를 높게 설정하면 비선형 경계 형성, 낮게 형성하면 선형 경계가 형성되는 것이다. 이런 경계 근처의 오분류를 허용하는 정도의 변수를 슬랙변수라고 한다. 

슬랙변수의 값이 C라는 매개변수만큼 곱해져서 비용함수로 들어가게 하는 규칙이 있다. 결과적으로 C가 작을수록 비선형셩이 약해지며 C가 클수록 비선형성이 강해진다. 

정리하면,

오분류데이터를 제외하고 정분류데이터를 최대한 선형으로 분류 → C가 작아짐

모든 데이터에 대하여 완전한 분류 규칙을 만듦 → C가 커짐

 

 

 

용어 정리

결정 경계: 클래스를 분류하는 기준(경계)

초평면: 다차원에서의 결정경계 평면

커널 트릭: 실제 고차원 데이터로 변경하지는 않지만 마치 고차원 데이터로 변경하는 연산을 통해 고차원 매핑을 유도하는 과정(각 데이터 포인트들의 유사도를 통하여 결정경계를 형성)

슬랙변수: 결정 경계를 만드는 과정에 허용하는 오차

오차를 허용하지 않으면 선형분류 불가 → 비선형성이 강화됨

슬랙변수의 정도를 결정: C라고 하는 매개변수가 결정함.

C가 작을수록 슬랙변수 허용(오차 허용) → 선형 분류 가능

C가 클수록 슬랙변수를 허용하지 않음(오차 허용 X) → 선형 분류 불가능(비선형성 강화)

728x90
반응형