상세 컨텐츠

본문 제목

[국비지원무료교육][머신러닝] 파이썬- 머신러닝 네 번째 수업: 과(대)적합, 과소적합, 일반화, KNN

Python

by Sam_Park 2022. 3. 10. 23:36

본문

  • 1교시- 복습, qna
  • 2교시 -일반화 / 과(대)적합/ 과소적합
    • 일반화: 훈련 세트로 학습한 모델이 테스트 세트에 대해 정확히 예측하도록 하는것
      • 가장 적절한 결과: " 일반화가 잘 되었다. "
      • 테스트 세트가 높은 것. -> 일반화 성능이 최대화 되는 것
    • 과(대)적합: 공을 설명하는데 축구공 케이스만 가지고 설명
      • 농구공은 공이 아닌 것으로 판단해버림
      • 너무 상세하고 복잡한 모델링
      • 훈련 데이터에만 과도하게 정확하게 작동함
        • 훈련세트에 너무 맞추어져 있어서 테스트 세트에서는 오히려 성능이 저하됨
    • 과소적합: 둥근 것은 다 공이라고 설명
      • 원, 바퀴 등등 모두 공이 되어버려서 판단을 할 수 없는 상태
      • 모델링은 너무 간단하게 하여 성능이 제대로 나오지 않음.
        • 훈련 세트를 충분히 반영하지 못해 훈련 세트, 테스트 세트 모두 성능 저하됨.
  • 모델 복잡도 곡선 -
    • 모델 복잡도:
      • 데이터와 관련한 모델(학습)이 너무 간단하면 과소적합이 되고,
      • 데이터와 관련한 모델(학습)이 너무 복잡하면 과대적합이 됨.
    • 최소 3번 정도의 하이퍼파라미터 튜닝을 통한 결과를 통해
      • train score: test score =0.8 : 0.75 (과소)
      • train score: test score =0.9 : 0.85 (일반화)
      • train score: test score =0.95 : 0.68 (과대)
    • 해결방법
      • 훈련 데이터의 다양성 보장
      • 데이터의 양 대대
      • 편중된 데이터 많은 것은 오히려 안 좋음 --- garbage in garbage out...
      • 규제를 통해 모델의 복잡도를 적정선으로 설정
  • 아무리 해도 모델의 개선이 이루어지지 않을 경우,
    • 데이터 자체를 더 좋게 만드는 것도 한 방법.
    • 하지만 좋은 데이터를 많이 모으는 것은 굉장히 어려운 일
  • KNN 알고리즘 ( 책 63p )
    • 새로운 데이터 포인트와 가장 가까운 훈련 데이터 셋의 데이터 포인트를 찾아 예측
    • k 값에 따라 가까운 이웃의 수가 결정
    • 분류와 회귀에 모두 사용 가능
    • 결정 경계(Decision Boindary)
      • 클래스를 분류하는 경계
      • 이웃이 적을 수록 모델의 복잡도 상승
        • -> 과대 적합 가능성 증가
      • 이웃이 전체 데이터 개수와 같아지면, 항상 가장 많은 클래스로 예측
        • -> 과소적합 발생
    • knn 의 매개 변수 중
      • P 는 거리계산 방법
        • 2 : 유클리디언 거릭 공식(Euclidean Distance)
          • data point(sample) 간의 거리를 재는 방법으로 3개 이상의 포인트가 있을 때 사용
        • 1 : 맨하튼 거리측정법
          • 데이터가 `각져 있을 때, 직각의 거리를 구하는 방법
      • n_neighbors - 이웃의 수
      • weight : 가중치 함수
        • uniform : 가중치를 동등하게 설정
        • distance : 가중치를 거리에 반비례하도록 설정
    • 장단점
      • 이해하기 쉽고 , 조정 없이도 좋은 성능을 발휘하는 모델
      • 훈련 데이터 세트가 크면( 특성, 샘플의 수) 예측이 느려진다.
      • 수백 개 이상의 많은 특성을 가진 데이터 세트와 특성 값 대부분이 0인 희소(sparse ) 한 데이터 세트에는 잘 동작하지 않는다.
        • -> 웬만한 모델의 공통적인 단점
      • 거리를 측정하기 때문에 같은 scale 을 같도록 정규화 필요
        • 키 175-180의 차이가, 시력 0.2 -2.0 차이보다 크게 나타날 수 있음
          • -> 키를 1.75 -1.8 정도로 scale 조정이 필요함.
      • 전처리 과정이 중요, 잘 쓰이지 않음

 

--- 

 

# 문제 정의
-붓꽃(iris) 의 품종을 구분하는 머신러닝 모델을 만들어보자

# 데이터 수집
-sklearn 에서 학습용 데이터로 제공

from sklearn.datasets import load_iris
iris= load_iris()
# iris 데이터가 딕셔너리 형태여서 키 값을 따로 확인할 필요가 있음
iris.keys()
iris


# DESCR 은 데이터 상세 설명으로, 
# 개행 문자가 포함되어 있어서 print 로 해줘야 깔끔하게 나옴

print(iris['DESCR'])

iris['feature_names']


# 데이터 전처리 - 생략
# 탐색적 데이터 분석

## 데이터 셋 구성하기 
-문제와 정답으로 구분하기

import pandas as pd
X = pd.DataFrame(iris['data'], columns = iris['feature_names'])
X.head()
y=iris['target']


# 여러 특성을 토대로 한 종류별 분류표를 그려줌 

pd.plotting.scatter_matrix(X,
figsize = (15,15),
marker='^',
c = y,
alpha = 1
)

pd.plotting.scatter_matrix

 

관련글 더보기

댓글 영역