fit: 데이터를 잘 설명할 수 있는 능력
Underfitting: 데이터를 설명하지 못함
Overfitting: 데이터를 과하게 설명
우리의 데이터셋은 전체 일부분
if 우리의 데이터셋이 전체와 유사하다면 Overfitting is best(거의 없음)
Underfitting 방지
Overfitting 제어
Regularization
early stopping
parameter norm penalty
Data augumentation
Noise robustness
Label smoothing
Dropout
Batch normalization
early stopping
validation error가 지속적으로 올라갈때 stop
trad-off -> 최적의 결과를 찾는 과정
parameter norm penalty
penalty의 계수를 적절하게 선택
Data augumentation
원본 이미지는 회전,축소, 확대 등 이미지 데이터 갯수를 늘리는 방법

Dropout
(딥러닝에서)무작위로 노드의 연결을 끊어버리는 것,
(정형데이터에서)피처의 일부분과 사용하여 모델을 생성(pruning)
test
가장 중요한 데이터: 프로젝트 결과물과 직결되는 데이터로 경진대회에서 등 test 데이터로 정량적인 평가를 함
Validation
주요 목적: 학습된 머신러닝을 test 데이터에 적용하기 전에 성능평가하기 위함
이를 이용해 early stopping, Dropout를 적용할지 판단
train
noise 데이터를 train에 포함하냐? 안하냐? 고민이 있음
데이터 분리방법
1. hold-out Validation
:하나의 train, 하나의 Validation을 구성
imbalance한 데이터가 몰릴 수 있음
샘플링 방법
random sampling
Validation의 대표성을 안 띌수 있음(데이터 사이즈가 크고, Validation이 크다면 랜덤하게 해도 대표성이 있을 수 있음)
stratified split
categorical feature의 비율을 유지하면서 split할 수 있는 방법이 있음
: train, Validation의 쌍을 여러개 구성하는 방법(k-fold 방식)


재현성이 필요한 이유??
랜덤성 제거하기 위한 방법: Fix seed
# 예시
seed = 42
# step 1
os.environ['PYTHONHASHSEED'] = str(seed)
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
# step 2
torch.use_deterministic_algorithms(True)
torch.backends.cudnn.benchmark = False

일반적인 머신러닝 모델의 workflow를 간략하게 표현