머신러닝,딥러닝 기초

topics
types 이론 학습 레퍼런스
tags

머신러닝,딥러닝 기초

왜 필요한가

데이터로부터 패턴을 찾아 미래를 예측하고 의사결정을 자동화하기 위해서다.

머신러닝/딥러닝이 없다면?

  • 모든 규칙을 사람이 직접 코딩해야 한다
  • 복잡한 패턴은 발견하기 어렵다
  • 데이터가 쌓여도 활용할 방법이 없다

핵심: 샘플 데이터를 가지고 전체를 추론하는 것이 모델의 목적이다. 모델링은 가능한 한 오차가 적은 모델을 만드는 과정이다.


기본 개념

AI, ML, DL의 관계

AI ⊃ ML ⊃ DL ⊃ GEN AI

기존 머신러닝 vs 딥러닝

  • 기존 머신러닝(딥러닝이 아닌): sklearn 사용
  • 딥러닝: pytorch나 tensorflow 사용

패턴과 노이즈

  • 패턴: 데이터에서 발견되는 규칙적인 것 → 데이터로 이용
  • 노이즈: 패턴이 없는 것 → 제거 대상

모델과 모델링

  • 모델: 데이터로부터 패턴을 찾아 수학적으로 정리해 놓은 것
    • 목적: 샘플을 가지고 전체를 추론
  • 모델링: 가능한 한 오차가 적은 모델을 만드는 과정

머신러닝 학습 방식

  • supervised (지도학습): 정답(레이블)이 있는 데이터로 학습
  • unsupervised (비지도학습): 정답 없이 패턴만 찾기
  • reinforcement (강화학습): 보상을 통해 학습

개발 프로세스

일반적인 개발 순서

1. 문제 정의

어떤 문제를 인공지능으로 해결할지 구체적으로 정의한다.

여기서 분류 기법인지 회귀 기법인지 판단

  • 분류 기법: 범주형 (예: 스팸인가 아닌가)
  • 회귀 기법: 연속형 (예: 집값은 얼마인가)

2. 데이터 수집

문제 해결에 필요한 데이터를 확보한다.

3. 데이터 전처리 & EDA

전처리 과정에서 EDA가 주로 이뤄진다. 특히 이상치/결측치 처리, 특성 선택 등에서 이뤄진다.

전처리 순서

  1. 형식 통일
  2. 결측치 처리
  3. 이상치 처리
  4. 스케일링, 인코딩
  5. 특성 추출, 선택, 변환
  6. 프레임워크에 맞게 변환
    • 주로 shuffle하여 진행
    • 왜? 순서로 인한 편향 방지하기 위해

참고: 데이터 전처리, 스케일링, 인코딩, Feature Engineering

4. 모델 선택 및 하이퍼파라미터 튜닝

문제 특성에 맞는 머신러닝 모델(예: 선형회귀, 의사결정나무, 신경망 등)을 선택하고, 성능을 높이기 위한 하이퍼파라미터를 설정한다.

5. 모델 학습

전처리된 데이터를 이용해 모델을 학습시킨다. 이때 학습 데이터와 검증 데이터를 나누어 사용한다.

6. 예측 및 성능 평가

테스트 데이터를 사용해 모델의 성능을 평가한다. 정확도, 정밀도, 재현율, F1-score 등 다양한 지표를 활용한다.

7. 모델 배포 및 모니터링

실제 서비스에 모델을 적용(배포)하고, 데이터가 바뀔 때마다 재학습 및 성능 모니터링을 진행한다.


비즈니스 관점을 포함한 방법론: CRISP-DM

|440

기업들이 이거 변형해서 쓰는 기업 많음용


머신러닝

분류와 회귀

다른 함수(기법)를 사용하기에 이를 먼저 구분해야 한다. 알고리즘과 평가방법도 다르다.

데이터 분리

전처리하여서 데이터가 준비되었다면, x와 y값을 분리해야 한다.

  • y (target): 우리가 맞춰야 하는 값
  • x (feature): 영향을 주는 특징


sklearn 라이브러리

사이킷런이라고 읽는다. 오픈소스다.

모델링 순서: 선언 > 학습 > 예측 > 평가

# <span id="1단계-불러오기"></span>1단계: 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

# <span id="2단계-선언하기"></span>2단계: 선언하기
model = LinearRegression()

# <span id="3단계-학습하기"></span>3단계: 학습하기
model.fit(x_train, y_train)

# <span id="4단계-예측하기"></span>4단계: 예측하기
y_pred = model.predict(x_test)

# <span id="5단계-평가하기"></span>5단계: 평가하기
print(mean_absolute_error(y_test, y_pred))

모델 성능 평가 지표

오차를 통해 계산한다.

  • 모델링: 학습(train) 오차를 최소화하는 방향으로 모델을 생성
  • 모델 튜닝: 검증(validation) 오차를 최소화하는 방향으로 모델 선정

회귀 평가 지표

오차로 평가한다 (당연함 값이 나오니까)

주요 지표

  • MSE (Mean Squared Error)
  • RMSE (Root MSE)
  • MAE (Mean Absolute Error)
  • MAPE (Mean Absolute Percentage Error)

예측값을 $\hat{y}$으로 표현한다.

R² (R-Squared)

  • aka 설명력
  • MSE의 표준화된 버전
    • MSE는 민감치에 예민함
    • BUT 과적합 여부를 판별하거나 직접적으로 평가할 때 MSE가 더 유용할 수도 있음
  • R² = 1, MSE = 0일수록 모델 성능 굿굿

$R^2 = \frac{SSR}{SST} = 1 - \frac{SSE}{SST}$

  • SS: Sum of Squares
  • T, R, E: Total, Regression, Error

분류 평가 지표

정확도로 평가한다.

혼동행렬 (Confusion Matrix)

앞: 예측 성공 여부, 뒤: 예측 결과

당연히 분모가 기준이다.

  • 정확도 (Accuracy): 잘 예측한 것 / 모두
  • 정밀도 (Precision): 잘 예측한 것 / positive라고 예측한 것 중에
  • 재현율 (Recall): 잘 예측한 것 / 실제 positive 중에

주의: 정밀도와 재현율은 반비례 관계다

F1-Score

정밀도와 재현율의 조화평균이다.

$\text{F1} = \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}$

지니 불순도 (Gini Impurity)

얼마나 잘 분류했니?

  • 낮으면 좋음
  • if 이진 분류
    • 0: 완벽하게 분리됨요
    • 0.5: 완벽하게 섞임요
    • 공식: 1 - (전체 중에 a가 있을 확률의 제곱) - (전체 중에 b가 있을 확률의 제곱)

$\text{Gini} = 1 - \sum_{i=1}^c (p_i)^2$


모델 검증: K-Fold Cross Validation

cv값 == k

단계 설명
1. 데이터 분할 데이터셋을 k개의 fold로 나눈다. 각 fold는 동일한 크기를 가지며, 서로 겹치지 않는다.
2. 반복 학습 및 검증 각 fold를 한 번씩 검증 데이터로 사용하고, 나머지 k-1개의 fold를 학습 데이터로 사용하여 모델을 학습한다.
3. 성능 기록 각 반복에서 검증 데이터에 대한 모델의 성능(예: 정확도, MSE 등)을 기록한다.
4. 평균 성능 계산 모든 fold에서 기록된 성능 점수를 평균 내어 최종 평가 결과를 도출한다.

왜 K-Fold를 쓸까?
데이터를 한 번만 나누면 운이 나쁘게 나눠질 수 있다. K-Fold는 모든 데이터가 검증에 사용되므로 더 신뢰할 수 있는 평가가 가능하다.


주요 알고리즘

선형 회귀 vs 로지스틱 회귀

구분 선형 회귀 (Linear Regression) 로지스틱 회귀 (Logistic Regression)
목적 연속적인 수치 예측 범주(특히 이진) 분류, 확률 예측
출력값 실수(예: 가격, 무게, 점수 등) 0~1 사이의 확률(예: 성공/실패, YES/NO 등)
적용 문제 예측(Regression) 문제 분류(Classification) 문제
수학적 모델 직선(선형 방정식) 시그모이드 함수(로짓, 확률로 변환)
비용함수 평균제곱오차(MSE) 로그 손실(Log Loss)

분류 알고리즘

알고리즘 특징 및 설명
로지스틱 회귀 (Logistic Regression) 연속값을 0~1 사이 확률로 변환해 이진 또는 다중 클래스 분류에 사용. 해석이 쉽고 빠름.
나이브 베이즈 (Naive Bayes) 베이즈 정리를 기반으로 한 확률적 분류. 텍스트 분류 등에서 성능이 좋음.
의사결정나무 (Decision Tree) 데이터의 특성에 따라 트리 구조로 분기하며 분류. 직관적이고 해석이 쉬움.
랜덤포레스트 (Random Forest) 여러 결정트리를 조합한 앙상블 방식. 과적합에 강하고 성능이 우수함.
서포트 벡터 머신 (Support Vector Machine, SVM) 데이터 간 경계(초평면)를 찾아 분류. 고차원 데이터에도 효과적.
K-최근접 이웃 (K-Nearest Neighbor, KNN) 새로운 데이터를 주변 K개의 이웃과 비교해 분류. 간단하지만 계산량이 많을 수 있음.
신경망/딥러닝 (Neural Network, DNN, CNN, RNN 등) 여러 층의 인공 뉴런을 통해 복잡한 패턴을 학습. 대용량, 비정형 데이터에 강점.
앙상블 학습 (Ensemble: Voting, Bagging, Boosting, Stacking) 여러 분류기를 결합해 성능 향상. 랜덤포레스트, 그라디언트 부스팅 등이 대표적.

회귀 알고리즘

알고리즘 특징/설명
선형회귀 (Linear Regression) 입력 변수와 출력 값 사이의 선형(직선) 관계를 가정. 가장 기본적이고 해석이 쉬움.
릿지 회귀 (Ridge Regression) 선형회귀에 규제(regularization)를 추가해 과적합(overfitting) 방지. 다중공선성 문제에 강함.
라쏘 회귀 (Lasso Regression) 릿지와 비슷하지만, 불필요한 변수의 계수를 0으로 만들어 변수 선택 효과도 있음.
다항회귀 (Polynomial Regression) 입력 변수와 출력 값 사이의 비선형(곡선) 관계도 학습 가능.
의사결정나무 회귀 (Decision Tree Regression) 트리 구조로 데이터를 분할하며 예측. 비선형 관계도 잘 잡음.
랜덤포레스트 회귀 (Random Forest Regression) 여러 결정트리를 조합(앙상블)해 예측 정확도와 안정성을 높임.
K-최근접 이웃 회귀 (KNN Regression) 새로운 데이터와 가장 가까운 K개의 이웃의 평균값으로 예측. 직관적이고 간단함.
서포트 벡터 회귀 (SVR, Support Vector Regression) SVM의 원리를 회귀에 적용. 마진 내에서 오차를 최소화. 비선형, 고차원 데이터에 강점.
신경망 회귀 (Neural Network Regression) 인공신경망을 이용해 복잡한 비선형 관계도 예측 가능. 대규모, 복잡한 데이터에 적합.
가우시안 프로세스 회귀 (Gaussian Process Regression) 확률적, 비선형 모델. 예측값의 불확실성까지 함께 제공.

주요 알고리즘 상세

선형회귀

예측하는 모델이 직선, 즉 일차함수로 표현된다.

|295x190

이를 회귀선이라고 부른다.

가장 최선의 직선 $\hat{y}$

  • 오차합이 최소가 되는 모델 (MSE)
    • $y$: 실제값, $\hat{y}$: 예측값
  • $\hat{y} = W_0 + W_1X_1$
    • 여기서 $W_0$: 편향(bias), $W_1$: 가중치(weight)
    • 오차값이 최소가 되는 편향과 가중치를 찾아야 함

단수, 다중 회귀

  • 독립변수에 따른 분류
  • 각 독립변수마다 가중치를 부여할 수 있음

KNN (K-Nearest Neighbor)

가장 가까운 이웃 k개를 찾아 그 값으로 값을 예측한다.

  • k값이 하이퍼파라미터
  • k값이 클수록 모델이 단순함
  • 회귀와 분류에 모두 사용

|260x134

여기서 파란 점의 값은 y, 즉 예측할 값이다. 그래프 축들은 독립변수들이다.

중요: 적절한 k값을 찾는 것이 엄청 중요하다

주의사항: 스케일링에 따라 knn 값이 달라질 수 있다. 스케일링이 거리의 단위 값을 달리한다고 생각할 수 있을 거 같다.

결정 트리 (Decision Tree)

특정 변수에 대한 의사결정 규칙을 나무가지가 뻗는 형태로 분류한다.

  • 분류, 회귀에 모두 이용되는 지도학습 알고리즘
  • 의미 있는 질문을 해야 함
  • 과적합을 유의해야 함
    • 가지치기(= 트리 깊이를 제한) 기법을 사용하여 방지 가능

|386x202

가지치기

max_depth, min_samples_leaf, min_samples_split 등의 하이퍼파라미터 값을 조정하여 할 수 있다.

  • 일반화 가능
    • == 학습 데이터 성능을 낮아지나 평가 데이터에 대한 성능을 높일 수 있음

랜덤포레스트 (Random Forest)

앙상블의 배깅(bagging)의 대표적인 알고리즘이다.

여러 결정트리를 배깅 방식으로 데이터 샘플링한다.

  • 부트스트랩 샘플링은 원본 데이터와 동일한 크기의 데이터셋을 복원 추출(replacement)을 통해 무작위로 생성하는 방법
  • 훈련 데이터 준비 > 부트스트랩 샘플링 > 결정트리 생성 > 예측 수행 > 집계 > 평가
    • 이때 샘플링 수 == 결정트리 수

주요 하이퍼파라미터

파라미터 설명
n_estimators 만들어질 Decision Tree 개수 지정 (기본값: 100)
많이 지정할수록 성능이 좋아질 것으로 기대할 수 있지만, 너무 많으면 학습 속도가 느려질 수 있음
max_depth 트리의 최대 깊이 (기본값: None)
기본값으로 설정하면 완벽히 분류될 때까지 분할하거나, 노드가 가진 샘플 개수가 min_samples_split 설정 값보다 작아질 때까지 계속 분할
min_samples_split 노드를 분할하기 위한 최소한의 샘플 개수 (기본값: 2)
값을 작게 설정할수록 계속 분할되어 트리 깊이가 깊어져 과적합 발생 가능
min_samples_leaf 리프 노드가 되기 위한 최소한의 샘플 수 (기본값: 1)
min_samples_split과 함께 과적합을 방지할 목적으로 사용
max_feature 최선의 분할을 위해 고려할 Feature 수 (기본값: auto)
정수형으로 선언하면 Feature 수, 실수형으로 선언하면 Feature 비율

Scaling (스케일링)

대표적인 scaling에는 정규화와 표준화가 있다.

주의: 트리 계열, 나이브 베이즈엔 없어도 됨

아웃라이어 = 이상치

이름 동작 방식 적용 대상 특징/범위 아웃라이어 영향
StandardScaler 각 컬럼에서 평균을 빼고 표준편차로 나눔 (z-score) 컬럼(특성) 평균 0, 분산 1 영향 있음
MinMaxScaler 각 컬럼을 최소최대값 기준으로 01 사이로 맞춤 컬럼(특성) 0~1(기본), 범위 변경 가능 영향 큼
normalize 각 행(샘플)을 벡터의 크기(노름)가 1이 되도록 맞춤(합이 1) 행(샘플) 벡터 크기 1 영향 적음

정규화

변수의 값이 0~1 사이

|340x117

  • sklearn func: MinMaxScaler, normalize (각 데이터 벡터 크기를 1로 조정, L2 기준)
    • normalize는 특징을 뽑을 때, 즉 방향만 필요할 때 주로 사용

표준화 (정규분포화)

평균이 0, 표준편차가 1

  • sklearn func: StandardScaler

모델 튜닝하기

모델 튜닝 == 최선의 하이퍼파라미터 찾기

당연히 모델 선언하고 파라미터 범위 등을 선언하고 해야 함

찾기 방법

  • Grid Search
  • Random Search
    • fn: RandomizedSearchCV

과정

함수 불러오기 > 파라미터 범위 지정 > 기본 모델 선언 > 랜덤 서치 모델 학습 > 결과 확인 > 예측 및 평가

코드 예시

# <span id="학습하기"></span>학습하기
model.fit(x_train, y_train)

# <span id="수행-정보"></span>수행 정보
model.cv_results_

# <span id="최적-파라미터"></span>최적 파라미터
model.best_params_

# <span id="최고-성능"></span>최고 성능
model.best_score_

딥러닝

프레임워크

  • PyTorch: 연구 및 실험에 적합
  • TensorFlow: 프로덕션 환경에 적합
    • Keras: TensorFlow에 통합된 고수준 신경망 API

참고: 머신러닝 프레임워크 비교

텐서 (Tensor)

딥러닝에서 데이터 처리 기본 구조다.

미분, GPU 가속, 메모리 최적화 등을 지원한다.

성능 평가

오차를 통해 계산한다.

  • 모델링: 학습(train) 오차를 최소화하는 방향으로 모델을 생성
  • 모델 튜닝: 검증(validation) 오차를 최소화하는 방향으로 모델 선정

회귀 모델과 분류 모델은 지도학습이다.


관련 문서