머신러닝,딥러닝 기초
| topics | |
| types | 이론 학습 레퍼런스 |
| tags |
머신러닝,딥러닝 기초
왜 필요한가
데이터로부터 패턴을 찾아 미래를 예측하고 의사결정을 자동화하기 위해서다.
머신러닝/딥러닝이 없다면?
- 모든 규칙을 사람이 직접 코딩해야 한다
- 복잡한 패턴은 발견하기 어렵다
- 데이터가 쌓여도 활용할 방법이 없다
핵심: 샘플 데이터를 가지고 전체를 추론하는 것이 모델의 목적이다. 모델링은 가능한 한 오차가 적은 모델을 만드는 과정이다.
기본 개념
AI, ML, DL의 관계
AI ⊃ ML ⊃ DL ⊃ GEN AI
기존 머신러닝 vs 딥러닝
- 기존 머신러닝(딥러닝이 아닌): sklearn 사용
- 딥러닝: pytorch나 tensorflow 사용
패턴과 노이즈
- 패턴: 데이터에서 발견되는 규칙적인 것 → 데이터로 이용
- 노이즈: 패턴이 없는 것 → 제거 대상
모델과 모델링
- 모델: 데이터로부터 패턴을 찾아 수학적으로 정리해 놓은 것
- 목적: 샘플을 가지고 전체를 추론
- 모델링: 가능한 한 오차가 적은 모델을 만드는 과정
머신러닝 학습 방식
- supervised (지도학습): 정답(레이블)이 있는 데이터로 학습
- unsupervised (비지도학습): 정답 없이 패턴만 찾기
- reinforcement (강화학습): 보상을 통해 학습
개발 프로세스
일반적인 개발 순서
1. 문제 정의
어떤 문제를 인공지능으로 해결할지 구체적으로 정의한다.
여기서 분류 기법인지 회귀 기법인지 판단
- 분류 기법: 범주형 (예: 스팸인가 아닌가)
- 회귀 기법: 연속형 (예: 집값은 얼마인가)
2. 데이터 수집
문제 해결에 필요한 데이터를 확보한다.
3. 데이터 전처리 & EDA
전처리 과정에서 EDA가 주로 이뤄진다. 특히 이상치/결측치 처리, 특성 선택 등에서 이뤄진다.
전처리 순서
- 형식 통일
- 결측치 처리
- 이상치 처리
- 스케일링, 인코딩
- 특성 추출, 선택, 변환
- 프레임워크에 맞게 변환
- 주로 shuffle하여 진행
- 왜? 순서로 인한 편향 방지하기 위해
4. 모델 선택 및 하이퍼파라미터 튜닝
문제 특성에 맞는 머신러닝 모델(예: 선형회귀, 의사결정나무, 신경망 등)을 선택하고, 성능을 높이기 위한 하이퍼파라미터를 설정한다.
5. 모델 학습
전처리된 데이터를 이용해 모델을 학습시킨다. 이때 학습 데이터와 검증 데이터를 나누어 사용한다.
6. 예측 및 성능 평가
테스트 데이터를 사용해 모델의 성능을 평가한다. 정확도, 정밀도, 재현율, F1-score 등 다양한 지표를 활용한다.
7. 모델 배포 및 모니터링
실제 서비스에 모델을 적용(배포)하고, 데이터가 바뀔 때마다 재학습 및 성능 모니터링을 진행한다.
비즈니스 관점을 포함한 방법론: CRISP-DM

기업들이 이거 변형해서 쓰는 기업 많음용
머신러닝
분류와 회귀

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

데이터 분리
전처리하여서 데이터가 준비되었다면, 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) | 확률적, 비선형 모델. 예측값의 불확실성까지 함께 제공. |
주요 알고리즘 상세
선형회귀
예측하는 모델이 직선, 즉 일차함수로 표현된다.

이를 회귀선이라고 부른다.
가장 최선의 직선 $\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값이 클수록 모델이 단순함
- 회귀와 분류에 모두 사용

여기서 파란 점의 값은 y, 즉 예측할 값이다. 그래프 축들은 독립변수들이다.
중요: 적절한 k값을 찾는 것이 엄청 중요하다

주의사항: 스케일링에 따라 knn 값이 달라질 수 있다. 스케일링이 거리의 단위 값을 달리한다고 생각할 수 있을 거 같다.
결정 트리 (Decision Tree)
특정 변수에 대한 의사결정 규칙을 나무가지가 뻗는 형태로 분류한다.
- 분류, 회귀에 모두 이용되는 지도학습 알고리즘
- 의미 있는 질문을 해야 함
- 과적합을 유의해야 함
- 가지치기(= 트리 깊이를 제한) 기법을 사용하여 방지 가능

가지치기
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 | 각 컬럼을 최소 |
컬럼(특성) | 0~1(기본), 범위 변경 가능 | 영향 큼 |
| normalize | 각 행(샘플)을 벡터의 크기(노름)가 1이 되도록 맞춤(합이 1) | 행(샘플) | 벡터 크기 1 | 영향 적음 |
정규화
변수의 값이 0~1 사이

- sklearn func:
MinMaxScaler,normalize(각 데이터 벡터 크기를 1로 조정, L2 기준)normalize는 특징을 뽑을 때, 즉 방향만 필요할 때 주로 사용
표준화 (정규분포화)
평균이 0, 표준편차가 1

- sklearn func:
StandardScaler
모델 튜닝하기
모델 튜닝 == 최선의 하이퍼파라미터 찾기
당연히 모델 선언하고 파라미터 범위 등을 선언하고 해야 함
찾기 방법

- Grid Search
- Random Search
- fn:
RandomizedSearchCV
- fn:
과정
함수 불러오기 > 파라미터 범위 지정 > 기본 모델 선언 > 랜덤 서치 모델 학습 > 결과 확인 > 예측 및 평가
코드 예시
# <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) 오차를 최소화하는 방향으로 모델 선정
회귀 모델과 분류 모델은 지도학습이다.
