머신러닝 실습1회차

3eo·2026년 2월 13일
post-thumbnail

머신러닝 모델 정하기

선형? 비선형?

  • Logistic Regression, Linear Regression(선형회귀) -> 선형
  • 더 복잡한 모델 : 앙상블 모델, SVM(kernel 사용) -> 비선형

Parametric modeles VS Non-parametric models

  • 모델의 파라미터 수가 데이터 크기와 무관하게 고정된 경우 = parametric
  • 데이터에 따라 달라지는 경우 = Non-parametric (보통은 트리 기반 모델)
    cf. 트리 기반 모델은 전처리에 있어 자유로운 부분이 있음 = 실무적으로 많이 사용
    -> 그중에서도 앙상블 트리 기반 모델

Tree-based Models

Probabilistic Models

Neural Network Models


Train / Test 나누고 평가

  • 실제상황에서는 앞으로 얻어질 데이터가 test data가 될 수 있기 때문에, 그런 경우에는 지금 가진 데이터로 test data를 따로 나눠서 가질 필요는 없음

  • train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
    cf. X : 행렬 -> 대문자 , y : 벡터 -> 소문자

  • random_state : 똑같은 랜덤숫자 반복 횟수

  • stratify : 클래스가 불균형(정상 데이터가 훨씬 많음)이 심할 경우 꼭 설정!

  • 참고로, 과적합인지 발견하려면 train 성능과 test 성능을 비교
    train_pred = clf.predict(X_train)
    accuracy_score(y_train, train_pred)

※ train과 test만 분리하면 문제가 될 수 있음. 머신러닝 모델의 하이퍼파라미터(4. 모델 학습 : random_state= )를 바꾸면서 성능을 봐야하는데 테스트 데이터는 맨 마지막 최종 평가 때만 사용. 파라미터 튜닝할 때 중간에 테스트할(검증할 validation) 용도가 필요.

Train / Validation / Test 로 나누기

  1. Train+Valid / test 분리
  2. Train / Valid 분리

※ 특정 한 부분만 validation 하면 아쉬워서 cross validation 출현

Cross Validation


  • 데이터가 적거나 골고루 평가하고 싶은 경우 적합하나, 데이터가 너무 많을 때는 시간이 너무 오래 걸리고 과정이 과하게 많아져서 부적합

  • max_depth : 트리를 얼마나 깊게(많이) 설정할 것인가 지표

  • GridSearchCV(estimator, param_grid, cv(=폴더 개수), scoring(=성능지표), n_job(웬만하면 -1로 설정하면 됨))

전처리


중앙값이나 최빈값(범주형 데이터)을 train 데이터에서만 뽑아옴
test 데이터는 마지막 최종 결과를 위해 미리 알아서는 안 되는 데이터.
정보를 알아야 하는 게 있다면 그건 오로지 train 데이터로만.

그러므로 fillna() 과정 : test data에도 train 데이터로부터 뽑은 값으로 결측치 채움

  • train 데이터만으로 정보를 보는데, train 데이터에는 없는 범주가 test에 있다면??

  • 모든 머신러닝 모델은 Data dependent (데이터 의존적)
  • 머신러닝을 정의하는 데 있어 학습이 중요한 키워드 -> Machine Learning
  • Data dependent로 인한 가장 큰 단점 : 데이터 자체가 편향되거나 잘못된거면 말짱도루묵
  • '데이터를 얼마나 신뢰할 수 있는가'를 가장 먼저 중요하게 고려해야 함

0개의 댓글