[머신러닝] 분류 학습 모델 - Logistic Regression
2025. 2. 27. 21:09ㆍAI & DS/머신러닝
로지스틱 회귀(Logistic Regression)를 사용하여 분류(Classification) 문제를 해결하는 과정으로,
Confusion Matrix(혼동 행렬)을 출력하여 모델 성능을 평가한다.
Logistic Regression : 로지스틱 회귀
1. 데이터 전처리 (StandardScaler 사용) | 입력 데이터를 표준화하여 모델 학습을 안정화 |
2. 로지스틱 회귀 모델 생성 | max_iter=200 설정하여 충분히 학습 |
3. 모델 학습 (fit) | 학습 데이터(X_train_scaled, y_train)를 사용하여 패턴 학습 |
4. 예측 (predict) | 테스트 데이터(X_test_scaled)를 분류 (0 또는 1) |
5. 평가 (confusion_matrix) | 얼마나 정확한지 혼동 행렬을 통해 평가 |
원본 데이터 (Raw Data)
위 그래프는 모델이 학습하기 전, 원본 데이터를 보여준다.
- 파란색 (Class 1, 악성) → 우측 상단에 위치
- 빨간색 (Class 0, 양성) → 좌측 하단에 위치
데이터가 두 개의 그룹으로 나뉘어져 있으며, 머신러닝 모델은 이 두 클래스를 나누는 경계를 찾아야 한다.
로지스틱 회귀 (Logistic Regression) 결정 경계
- 로지스틱 회귀는 데이터를 직선(선형 경계)으로 나누려고 한다.
- 빨간색 영역 (Class 0, 양성) vs 파란색 영역 (Class 1, 악성)
- 데이터를 최대한 정확하게 나누는 직선(결정 경계)을 찾음 → S자 함수(Sigmoid)를 사용하여 확률을 예측
- 선형적으로 나눌 수 있는 데이터에서는 성능이 좋지만, 복잡한 데이터에서는 한계가 있을 수 있다.
1 . 데이터 스케일링 (StandardScaler 적용)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # 학습 데이터 기준으로 변환
X_test_scaled = scaler.transform(X_test)
📌 이유 (왜 스케일링을 해야 할까?)
- 로지스틱 회귀는 기울기 기반(Gradient Descent) 최적화를 사용하기 때문에 따라서, 특성이 크기가 다르면 학습이 어렵다.
- StandardScaler()를 사용하여 평균=0, 표준편차=1로 변환
- .fit_transform(X_train) → 학습 데이터를 기준으로 변환
- .transform(X_test) → 동일한 변환을 테스트 데이터에 적용
💡결과적으로 모든 입력 데이터(feature)가 같은 범위를 가지게 되어, 모델이 더 안정적으로 학습할 수 있음
- 원본 데이터 : Weight는 50 ~ 100 사이의 값이고, Height는 1.5 ~ 2.0 사이로 값의 범위가 다름
Weight(kg) | Height(m) |
50 | 1.5 |
60 | 1.6 |
70 | 1.7 |
80 | 1.8 |
90 | 1.9 |
100 | 2.0 |
- Z-score 표준화 후 데이터 (평균 0, 표준편차 1) : 모든 값이 평균 0, 표준편차 1을 가지도록 변환됨
Weight(kg) | Height(m) |
-1.46 | -1.46 |
-0.88 | -0.88 |
-0.29 | -0.29 |
0.29 | 0.29 |
0.88 | 0.88 |
1.46 | 1.46 |
2. 로지스틱 회귀 모델 생성 및 학습
lr_model = LogisticRegression(max_iter=200)
📌 이유 (왜 max_iter=200?)
- LogisticRegression() → 이진 분류(Binary Classification)에 사용됨
- .max_iter=200 → 경사 하강법(Gradient Descent) 반복 횟수 설정.
- 기본값(100)보다 늘려서, 학습이 충분히 이루어지도록 보장.
lr_model.fit(X_train_scaled, y_train)
- X_train_scaled (훈련 데이터) : 입력 데이터 (Features)
- y_train (정답 데이터) : 출력 데이터 (Labels)
- 로지스틱 회귀 모델이 이 데이터를 학습하면서 가중치(Weight)를 업데이트함
- 모델이 W와 b (가중치와 편향)를 찾음 → 가장 잘 맞는 결정 경계를 학습
- 로지스틱 회귀는 시그모이드(Sigmoid) 함수를 사용하여 클래스 확률을 계산
3. 예측 수행
lr_pred = lr_model.predict(X_test_scaled)
- predict(X_test_scaled) : 모델이 테스트 데이터(X_test_scaled)에 대해 예측을 수행
- 각 샘플에 대해 0(양성) 또는 1(악성) 클래스를 예측
- 결과적으로 테스트 데이터의 각 샘플이 Class 0 또는 Class 1로 분류됨
4. 모델 평가 (Confusion Matrix 출력)
lr_matrix = confusion_matrix(y_test, lr_pred)
print("Logistic Regression Confusion Matrix:")
print(lr_matrix)
📌 Confusion Matrix란?
- Confusion Matrix(혼동 행렬)는 모델이 얼마나 정확하게 분류했는지 평가하는 방법
Logistic Regression Confusion Matrix:
[[ 62 1]
[ 2 106]]
각 숫자의 의미 (TP, TN, FP, FN)
예측 | 0(양성) | 1(악성) |
실제 0 (양성) | TN(True Negative) = 62 정확히 정상(양성)을 맞춤 |
FP(False Positive) = 1 오탐 정상(양성)을 암 환자(악성)으로 잘못 예측 |
실제 1 (악성) | FN(False Negative) = 2 오탐 암환자(악성)을 정상(양성)으로 잘못 예측 |
TP(True Positive) = 106 정확히 암 환자(악성)을 맞춤 |
- 양성(0) 예측 정확도: 62 / (62+1) = 98.41%
- 악성(1) 예측 정확도: 106 / (106+2) = 98.15%
- 전반적으로 높은 정확도를 가진 모델이며, FN(False Negative)이 2개라서, 악성 환자를 놓칠 확률이 낮지만 존재함
- 이 모델은 높은 정확도를 가지며, 오탐(FP)과 미탐(FN)이 매우 적음
- FN(악성을 놓치는 것)이 낮은 것이 중요 (의료 데이터에서는 FN이 치명적일 수 있음)
코로나 검사 예제
- TN (True Negative) = 진짜 음성 (정상)
- FN (False Negative) = 잘못된 음성 (진짜 확진자인데 정상 판정)
- FP (False Positive) = 잘못된 양성 (정상인데 확진자로 나옴)
- TP (True Positive) = 진짜 양성 (확진자 제대로 잡음)
'AI & DS > 머신러닝' 카테고리의 다른 글
[머신러닝] 하이퍼파라미터 / 최적의 하이퍼파라미터 찾기란 무엇인가? / Random Forest와 하이퍼파라미터 (0) | 2025.02.27 |
---|---|
[머신러닝] 분류 학습 예측 모델 - KNN / Random Forest / 3가지 모델의 단점 및 원인 (0) | 2025.02.27 |
[머신러닝] Train set/Test set/Features/Target 이란? (0) | 2025.02.27 |
[머신러닝] 데이터 인코딩(DataEncoding)/Feature Scaling이란? (0) | 2025.02.27 |
[머신러닝/문법] Numpy & Pandas 결측치 관련 함수 (0) | 2025.02.26 |