본문 바로가기

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

[복습] Python | 분석 | SVM(Support Vector Machine) (3)

728x90
반응형

연습문제

iris data set을 SVM 모형을 사용하여 분류 모형 설계하기

 

1. 데이터 로딩

 

 

 

2. 데이터 분리

train_x, test_x, train_y, test_y = train_test_split(iris_x, iris_y, random_state = 0)

 

 

3. 모델링(스케일링은 생략, 원래는 스케일링 해야 함)

 

 

 

4. 평가

 

 

 

5. 튜닝(C와 gamma 같이 튜닝)

df_result = DataFrame({'C':vi, 'gamma':vj, 'train_score':score_tr, 'test_score':score_te})

 

위 표에서는 잘렸지만, score가 좋게 나오는 구간이 발생한다.

 

간단히 해석하자면, 고차원성을 강화하면 새로운 데이터는 걸러지지 않는 예측 불가능한 오버핏이 발생한다.

모델은 복잡해질수록 문제가 발생할 수밖에 없기 때문이다.

C보다도 gamma 때문에 과대적합이 심하게 발생한다.

 

이를 시각화하여 보면 한눈에 확인이 가능하다.

 

튜닝 결과 시각화(히트맵)

 

heatmap(values,                   # 값

               xlabel,                    # x 이름

               ylabel,                    # y 이름

               xticklabels,            # x눈금

               yticklabels,            # y 눈금

              cmap = None)       # 컬러맵

 

위 결과를 해석하자면, gamma가 커지면 의미 없는 모델이다.

C가 굉장히 작을 때 또한 문제가 있는 모형처럼 모인다.

gamma는 1, C는 1이나 10 정도가 적절해 보이는 시각화 정보를 제공한다.

 

 

heatmap 을 사용하는 이유: 비교할 두 값의 변화에 따른 수치형 데이터의 크기를 비교하기 위해, 크기를 색으로 표현하여 크고 작아지는 구간을 체크하기 위한 용도.

두 변수의 변화에 따른 수치적 관찰 대상에 대한 높낮이, 크고 작음을 색으로 표현하기 좋은 시각화 기법이다.

 

 

 

6. 최종 모델

 

SVM에서는 predict_proba를 출력하기 위해서는 반드시 모델 생성시 probability = True로 설정하여야 한다.

 

 

728x90

 

SVM 최종 정리

특징

1. 장점

  - 예측력이 강함

  - 과대적합이 되기 어려움

  - 저차원이어도 (설명 변수가 몇 개 되지 않아도) 좋은 예측 결과를 리턴

 

 

2. 단점

  - 학습 속도가 느림(연산 비용이 높음).

     고차원 맵핑을 계속 해야하는 비선형 커널 트릭 등으로 복잡한 규칙이 생기기 때문에 계수 생성으로 인해 학습 속도가 느림

  - 큰 데이터에 적합하지 않음(100,000개 이상의 데이터에 비효율적)

  - 연산 과정이 복잡하므로 모델 해석이 불가함(블랙박스 모형이라고 표현함)

  - 변수의 스케일에 영향을 많이 받음 → 변수 스케일링 필요

  - 설명변수가 수치형일 경우 가장 유리(회귀분석처럼 식을 추정하다보니 factor가 많아지면 그것의 계수 추정이 의미가 없기 때문)

  - 이상치에 상대적으로 민감한 편

     ** 결정경계에 이상치가 있으면 민감

         해결 방법) 슬랙변수 인정(오차를 허용) = C를 줄임. 그냥 오차라고 인정하면, 이상치에 덜 민감해질 수 있음. 따라서 C가 작아야 함

 

이상치에 민감하다는 것은, 결정경계에 이상치가 가득하면 민감하다는 의미이다. 결정경계가 이상치 때문에 휘기도 하기 때문이다. 이상치가 결정경계에 멀게 있으면 민감하지는 않다. 그래서 상대적으로 민감하다고 표현한 것이다.

 

결정경계에 이상치가 있다는 것은, 이상치를 무시하지 못하면 비선형성이 강화된다는 의미이다. 이상치에 민감하지 않게 하려면 슬랙변수를 인정하여야 한다. 오차를 허용하겠다는 의미이다. 오차를 허용하면 선형성이 강해진다. 

728x90
반응형