일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- data analyst
- 데이터분석
- Chat GPT
- da
- 태블로
- cross join
- 프로젝트
- SQLD
- 최종 프로젝트
- 팀프로젝트
- If
- pandas
- 클러스터링
- 군집화
- 서브쿼리
- SQL
- 프롬프트 엔지니어링
- jd
- lambda
- 히트맵
- 기초프로젝트
- 전처리
- streamlit
- 크롤링
- 시각화
- 데이터 분석
- 기초통계
- Python
- GA4
- 머신러닝
- Today
- Total
세조목
머신러닝 - 데이터 분리(feat. 과적합)(24.02.01) 본문
1. 과(대)적합
과대적합이란
데이터를 너무 과도하게 학습한 나머지 해당 문제만 잘 맞추고
새로운 데이터를 제대로 예측 혹은 분류하지 못하는 현상
을 의미한다.
위 이미지의 첫번째 경우가 과(대)적합의 예시인데
주어진 데이터를 너무 과도하게 학습한 결과
위 예시와 같은 경우의 문제는 잘 맞추지만
나머지 문제들은 예측(or 분류)할 수 없게된다.
과(대)적합이 있다면 과(소)적합도 있을텐데
위 이미지의 가장 오른쪽 예시가 과(소)적합에 해당한다.
과(대)적합이 주어진 데이터를 너무 과도하게 학습한 결과라면
과(소)적합은 반대로 주어진 데이터를 충분히 학습하지 못함에 따른 결과다.
데이터가 충분하지 않거나, 모형이 지나치게 단수할 때 이런 과(소)적합이 발생한다.
2. 데이터 분할
어떻게 이 문제를 해결할 수 있을까?
답은 바로 데이터를 나누어서 학습시키는 것이다.
Train data를 가지고 우선 학습을 진행하고,
그 모델을 가지고서 Test Data를 평가하는 것이다.
Train, Test 데이터셋을 만드는데 사용되는 함수, 파라미터, 그리고 반환 값은 아래와 같다.
함수 | |
sklearn.model_selection.train_test_split | - |
파라미터 | |
test_size | 테스트 데이터 세트 크기 |
train_size | 학습 데이터 세트 크기 |
shuffle | 데이터 분리 시 섞기 |
random_state | 호출할 때마다 동일한 학습/테스트 데이터를 생성하기 위한 난수 값으로 수행할 때마다 동일한 데이터 세트로 분리하기 위해 숫자를 고정시킬 필요가 있음 |
반환값 | |
X_train | - |
X_test | - |
y_train | - |
y_test | - |
머신러닝에서의 파라미터는 '알아서 정해지는 값' 의 의미로
python에서의 파라미터(매개변수)와는 다른 의미다.
데이터 분리 예시는 아래와 같다.
이 예시에서 train data set에서의
x변수(독립변수)는 'Fare', 'Sex'이고,
y변수(종속변수)는 'Survived'다.
from sklearn.model_selection import train_test_split
우선 데이터 분리에 필요한 'sklearn.model_selection' 라이브러리를 불러온다.
X_train, X_test, y_train, y_test = train_test_split(titanic_df[['Fare', 'Sex']], titanic_df[['Survived']], test_size = 0.3, shuffle=True, random_state = 42, stratify=titanic_df[['Survived']])
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
>>> (623, 2) (268, 2) (623, 1) (268, 1)
그런 다음 위와같이 코드를 입력해주면
전체 891개였던 데이터가 623개, 268개로 나눠진 것을 확인할 수 있다.
여기서 test_size에 0.3을 넣어주는건 원데이터를 7:3으로 나누겠다는 의미이고
random_state에 42를 넣는 이유는 일반적으로 42를 넣기때문이다.
'데이터 분석 공부 > 머신러닝' 카테고리의 다른 글
머신러닝 - 의사결정나무, 랜덤포레스트, KNN, 부스팅 알고리즘(24.02.02) (1) | 2024.02.02 |
---|---|
머신러닝 - 전처리(인코딩, 스케일링)에서부터 로지스틱 회귀를 적용한 예측 모델 생성까지(feat. 선형회귀와 로지스틱 회귀의 차이, 스케일링의 정규화와 표준화는 각각 언제 사용하는지)(24.02.. (0) | 2024.02.02 |
머신러닝 - 전처리(인코딩, 스케일링)(24.02.01) (0) | 2024.02.01 |
머신러닝 - 로지스틱회귀(24.01.31) (0) | 2024.01.31 |
머신러닝 - 단순&다중선형회귀(24.01.30) (0) | 2024.01.31 |