- 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
)
댓글 영역