본문 바로가기
Experience/- KT AIVLE School

KT AIVLE School 4주차 정리 - 지도 학습

by Yoojacha 2023. 2. 21.

지도학습 - 분류(Classification), 회귀(Regression)

  • 찾고자 하는 변수(y, target, 종속변수, 결과, 목표)가 범주형인지 연속형인지에 따라서 분류, 회귀를 구분해서 사용한다.

필요한 용어 정리

  • 모델
  • 추정, 예측, 추론
  • 변수(Variable), 필드(Field), 속성(Attribute), 특성(Feature)
  • 개체(Instance), 관측치(Observed Value), 기록(Record), 경우(Case)
  • 독립변수, 종속변수
  • 학습용, 검증용, 평가용 데이터셋
  • 과대적합(Overfitting), 과소적합(Underfitting)
  • 오차 = 실제값 - 예측값 / 이탈도(Deviance)
  • y: 실제값 / y-hat: 예측값 / y-bar: 평균값

회귀 평가 지표 (오차 줄이기)

  • 오차 합 SE
  • 오차 제곱의 합 SSE
  • 오차 제곱의 합의 평균 MSE
  • 오차 제곱의 합의 평균의 루트 RMSE
  • 오차 절대값의 합 SAE
  • 오차 절대값의 합의 평균 MAE
  • 오차 절대값의 합의 퍼센트 MAPE
  • SSR (Sum Squared Regression) = 실제값과 비교한 회귀식의 오차
  • SSE (Sum Squared Error) = 실제값과 비교한 평균의 오차
  • R^2 (결정계수) = SSR / SST

분류 평가 지표 (정확도 높이기)

  • 정확도 (Accuracy)
  • 정밀도 (Precision)
  • 재현율 (Recall)
  • 오분류표 (Confusion Matrix)
  • 특이도 (Specificity) : 실제값이 False 일 때, False로 판정할 확률
  • 민감도 (Sensitivity) : 실제값이 True 일 때, True로 판정할 확률
  • F1-Score : 정밀도와 재현율의 조화평균

모델링 순서

  1. 데이터 전처리
  2. x, y 분리
  3. train_test_split
  4. 필요한 라이브러리 import
  5. 변수로 모델 선언 model =
  6. 모델을 가지고 학습 model.fit
  7. 학습한 모델을 가지고 예측 model.predict
  8. 예측한 결과를 평가

회귀 문제

  • 모델
    • LinearRegression
    • KNeighborsRegressor :
      • x_train 정규화 필요, n_neighbors 에 따라 성능 차이 발생
      • x, y의 거리를 기준으로 이웃을 찾는 방식
      • minmaxscaler를 통해서 x와 y의 최소최대 범위를 일치시켜줘야 올바른 결과가 나온다.
      • 시각화 어려움
    • DecisionTreeRegressor :
      • 시각화 쉬움
      • 스무고개처럼 초반에 의미있는 질문을 주어서 분류해야한다.
      • 노드의 깊이가 크면 어려움 (트리 크기를 제한해서 성능 높인다.)
      • 지니 불순도 (Gini Impurity)
      • 엔트로피 (Entropy)
      • 바이너리 클래스로 계산
      • 정보 이득 = 부모노드의 불순도 - 자식노드의 불순도
      • 부모노드의 불순도 대비 자식노드의 불순도를 가장 낮추는 질문이 Decision Tree 에서 가장 의미있는 질문이 된다.
      • 가장 정보 이득이 큰 속성부터 분할을 한다.
      • max_depth : 과적합 방지용 / 트리의 깊이.
      • min_samples_split : 과적합 방지용 / 노드 분할을 위한 최소 샘플 수
      • min_samples_leaf : 과적합 방지용 / 리프 노드의 최소 샘플 수
      • max_feature : 기본 값 None / 최선의 분할 위해 고려할 feature 수
      • max_leaf_node : 리프 노드 최대 개수
      • model.feature_importances_ : 학습한 모델에서 변수 중요도 데이터
    • SVR :
      • x_train 정규화 필요
    • RandomForestRegressor
    • XGBRegressor
  • 평가
    • mean_absolute_error
    • mean_squared_error
    • root mean_squared_error
    • mean_absolute_percentage_error
    • r2_score : SSR / SST
    • model.coef_ : 기울기, 가중치
    • model.intercept_ : y 절편, 편향

분류 문제

  • 모델
    • DecisionTreeClassifier
    • KNeighborsClassifier
    • LogisticRegression : 로지스틱 함수(시그모이드 함수)를 통해 회귀를 이용해 분류 문제 해결
    • SVC :
      • x_train 정규화 필요
      • 결정 경계(분류를 결정하는 선)
      • 벡터(scatterplot의 데이터 하나의 포인트)
      • 서포트 벡터(마진을 결정해주는 결정 경계선에 가장 가까운 포인트들)
      • 마진(마진을 최대로 하는 결정 경계를 찾음)
      • 비용(cost, C) : 많이 주면 hard margin 으로 과대적합 발생. 반대는 soft margin 으로 과소적합 발생
      • 감마(gamma) : 모델이 생성하는 경계의 복잡한 정도
      • 커널 설정: linear, poly(Polynomial), rbf(Radial Basis Function)
    • RandomForestClassifier
    • XGBClassifier
  • 평가
    • accuracy_score : 정확도
    • recall_score : 재현율 = 민감도
    • precision_score : 정밀도
    • classification_report
    • confusion_matrix : 혼동 행렬

K-Fold 교차 검증 / cross_val_score(모델 , x_train , y_train , cv=분할 개수)

  • k >= 2
  • k 개로 데이터를 분할하여 각각의 데이터를 평가에 한 번, 학습에 k-1번 사용하여 모델 성능 평가
  • 특정 모델의 교차 검증을 통한 평균 성능을 확인
  • 데이터의 편향 방지
  • 과소적합 문제 방지
  • train 과 test 를 미리 분리한 후에 train 데이터만 이용하여 검증할 것

Hyperparameter

  • 모델링할 때 최적화하기 위해 조절 가능한 옵션

Grid Search CV & Random Search CV

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_absolute_error, r2_score

# 1. 하이퍼 파라미터 튜닝해볼 범위 설정
param = {'n_neighbors': range(1, 101),
    'metric': ['euclidean', 'manhattan']}

# 2. 모델 선언
model = KNeighborsClassifier()

"""
- 확인할 모델
- 설정한 파라미터 변수
- cv: K-Fold 분할 개수(기본값=5)
- scoring: 평가 방법 ('accuracy', 'r2')
"""
model = GridSearchCV(model, param, cv=5, scoring='accuracy')
from sklearn.model_selection import RandomizedSearchCV
from sklearn.metrics import confusion_matrix, classification_report

# 1. 하이퍼 파라미터 튜닝해볼 범위 설정
param = {'max_depth': range(1, 51)}

# 2. 모델 선언
model = DecisionTreeClassifier(random_state=1)

"""
추가
- n_iter: Random하게 시도할 횟수 (기본값=10)
"""
model = RandomizedSearchCV(model, rand_param, cv=3, n_iter =20, scoring='r2')
  • Grid Search 실행 횟수 = param 으로 만들어지는 모든 조합 X CV 값
  • Random Search 실행 횟수 = param 으로 만들어지는 모든 조합에서 n_iter 값 만큼 랜덤하게 추출
# 1. 모델 선언 후 학습 진행
model.fit(x_train, y_train)
model.fit(x_train, y_train)

# 2. 결과 확인
model.cv_results_] # 수행 결과 전체
model.cv_results_['mean_test_score'] # 평균 수행 결과
model.best_params_ # 최고 성능이 나온 최적의 파라미터
model.best_score_ # 최고 성능 점수
model.best_estimator_.feature_importances_ # 변수 중요도 (결정트리의 경우)

# 3. y 예측
y_pred = model.predict(x_test)

# 4. 회귀 평가
print(mean_absolute_error(y_test, y_pred))
print(r2_score(y_test, y_pred))

# 4. 분류 평가
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

댓글