오늘은 로지스틱 회귀에 대해서 설명을 드리겠습니다!
얘는 아주 큰 함정이 있는 친구입니다.
로지스틱 '회귀' 지만 정작 이 친구는 분류 모델입니다!
이진 분류에서 사용하는 알고리즘입니다.
1. 이진 분류
이진 분류는 결과를 특정된 두 가지 클래스(0과 1, Yes or No 같은 형식)를 나누어 주는 모델입니다.
즉, 로지스틱 회귀를 사용하고 해석을 하게 되면 위와 같이 결과를 분류할 수 있습니다.
2. 시그모이드 함수
$$ Sigmoid(x) = \frac{1}{1 + e^{-x}} $$
이것을 그래프로 표현하면 아래와 같습니다.
- x가 0일 때, 시그모이드 함수의 값은 0.5입니다.
- x가 작아지면 작아질수록, 0에 가까워 집니다.
- x가 커지면 커질수록, 1에 가까워 집니다.
3. 로지스틱 회귀의 손실 함수
아래의 수식들을 확인하기 전에 간단한 기호에 대해서 설명을 드리겠습니다.
$$ y_i : 실제 클래스 데이터$$
$$ \hat{y_i} : 모델 예측 확률(P(y = 1|x))$$
$$ n : 데이터\,갯수 $$
$$ L(y_i,\hat{y_i}) = -(y_i \cdot \log(\hat{y}_i) + (1 - y_i) \cdot \log(1- \hat{y_i})) $$
위의 수식은 잘못된 예측을 할수록 손실함수의 크기가 커지는 형태입니다.
4. 로지스틱 회귀의 비용함수
$$ J(theta) = -\frac{1}{n} \sum_{i = 1}^{n}(y_i \cdot \log(\hat{y}_i) + (1 - y_i) \cdot \log(1- \hat{y_i}) $$
손실함수는 데이터 하나의 값의 차이를 나타낸다고 하면
비용함수는 데이터 셋 전체의 차이를 값으로 낸 결과입니다.
5. 로지스틱 회귀의 모델 학습
적절한 비용함수와 최적의 파라미터를 찾기 위해선, 경사하강법을 사용하면 됩니다!!
경사하강법은 추후에 업로드 할 예정입니다.
코드리뷰 하겠습니다.
사용할 데이터는 저어어어엉말 유명한 iris 데이터 입니다.
원래는 라벨이
이렇게 3개로 나뉘어져 있지만 0은 빼고 두 가지로 분류를 하도록 하겠습니다!
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
import seaborn as sns
# 데이터 로드
iris = load_iris()
X = iris.data
y = (iris.target != 0).astype(int) # 이진 분류를 위해 라벨 변환
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 로지스틱 회귀 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
# 히트맵 시각화
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=["Class 0", "Class 1"], yticklabels=["Class 0", "Class 1"])
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.title("Confusion Matrix Heatmap")
plt.show()
예측 결과는 틀린게 하나도 없네요!!
보통은 heatmap을 사용하기도 하는데 confusion_matrix를 사용하는게 훨씬 편할 것 입니다!!
그럼 오늘은 여기서 마치고
다음번에 뵙겠습니다!!
'[데이터 분석가] > [머신러닝,딥러닝]' 카테고리의 다른 글
서포트 벡터 머신 (Support Vector Machine) (0) | 2025.01.22 |
---|---|
선형 회귀 (릿지, 라쏘, 엘라스틱 넷) (0) | 2025.01.21 |
선형 회귀(단순 선형/다중 선형) (0) | 2025.01.20 |