개발하는 뚱이
🐍로지스틱 회귀란 무엇일까?? (Ei : Ez Ai) 본문
로지스틱 회귀란 무엇일까?
로지스틱 회귀는 입력 데이터가 들어왔을 때 그 데이터가 어떠한 범주에 속할 확률을 0 ~ 1로 값을 예측 후, 더 높은 범주에
속하는 것으로 분류를 하는 지도학습 알고리즘 입니다.
로지스틱 회귀는 이름이 '회귀'이지만 작동 방식은 분류와 가깝습니다.
간단히 생각을 해보면, 스팸 메일을 분류할 때 받은 매일이 스팸 메일이라면 스함에 아니라면 메일함에 넣는것을 생각 하면 됩니다.
그럼 이러한 로지스틱 회귀가 어떠한 방식으로 구현이 되고 작동이 어떻게 되어 있는지 쉽게 알아 봅시다.
로지스틱 회귀의 그래프 && Sigmoid Function 알아보자!
이 그림에서 S자 형태의 그래프를 확인할 수 있습니다.
이러한 S자 형태는 Sigmoid Function(시그모이드 함수)의 특성을 나타냅니다.
로지스틱 회귀에서의 시그모이드 함수의 특징 3가지를 알아보겠습니다.
값의 범위 : 시그모이드 함수는 항상 0과 1 사이의 값을 출력합니다.
S자 형태: 입력 값이 클수록 1에 가까운 값, 작을수록 0에 가까운 값을 반환합니다.
중앙값 0.5: 시그모이드의 중앙값은 0.5입니다. 이는 모델이 두 클래스를 구분하는 경계점이 됩니다.
로지스틱 회귀에서 Sigmoid Function은 모델의 출력을 0과 1 사이의 확률 값으로 변환하여, 최종적으로 클래스에 속할 확률을 계산합니다.(이진 분류)
우리는 로지스틱 회귀에서 Sigmoid Function을 배웠습니다. 이제 다음으로 중요한 Odds라는 개념을 배워보겠습니다.
Odds와 Log-Odds를 배워보자!
Odds는 어떤 사건이 발생할 확률과 발생하지 않을 확률 간의 비율을 나타냅니다.
이제 Odds에 log를 취하면 Log-Odds가 됩니다. Log-Odds를 하는 이유는
Log-Odds는 -∞에서 +∞까지의 값을 가지며, 이를 통해 선형 회귀처럼 다루기가 더 쉬워집니다.
자세한 설명) Odds는 0에서 1 사이의 값을 가지지만, 이 값들은 비대칭적입니다. 로그를 취하면 값들이 대칭적으로 바뀝니다.
이러한 Log-Odds는 아쉽게도 우리가 원하는 값이 아닙니다. 그렇기 때문에 우리가 아까 배운 Sigmoid Function을 사용합니다. Sigmoid Function은 Log-Odds를 0과 1 사이의 값으로 바꿔주어, 이 값이 확률로 해석되도록 도와줍니다. 이제 이러한 확률을 통해 1 or 0을 예측할 수 있습니다.
(레벨 업) 이것도 알면 좋아요!
이진 분류에서의 Sigmoid Function은 0.5를 기준으로 결정 경계(Decision Boundary)를 설정합니다.
즉, 출력값이 0.5보다 크면 한 클래스로, 작으면 다른 클래스로 분류하는 방식입니다.
Sigmoid Function은 주로 이진 분류 문제에서 사용되며, 두 개의 클래스 중 하나를 예측할 때 적합합니다. 반면에 다중 분류 문제에서는 여러 개의 클래스를 다루기 때문에 Softmax Function을 사용합니다. Softmax Function은 각 클래스에 대한 확률을 계산하며, 이 확률들의 합이 항상 1이 되도록 정규화하는 역할을 합니다.
정규화 : 데이터의 범위를 일정한 기준으로 맞추는 것을 의미
더 자세한 Sigmoid Function과 Softmax Function에 대해서는 나중에 활성화 함수에 대해 다룰 때 자세히 설명하겠습니다.
간단 요약
- 어떠한 범주에 속할 확률을 0 ~ 1로 값을 예측 후, 분류하는 지도학습 알고리즘
- 로지스틱 회귀는 Sigmoid Function으로 나타나고, 이진 분류에 적합함
- Log-Odds를 Sigmoid Function을 사용하여 0과 1사이의 값으로 바꿈
- 다중 분 문제에서는 Softmax Function이 사용됨
코드 구현
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 데이터 로드
iris = load_iris()
x = iris.data
y = iris.target
# 이진 분류를 위해 두 개의 클래스만 선택 --> 굳이 안해도 되지만 이진분류를 하기위한 작업(안 하면 다중 분류)
x = x[y != 2]
y = y[y != 2]
# 훈련 세트와 테스트 세트를 나눔
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
# 데이터 전처리 과정
ss = StandardScaler()
ss.fit(x_train)
train_scaled = ss.transform(x_train)
test_scaled = ss.transform(x_test)
# 로지스틱 회귀 모델 생성 및 학습
lr = LogisticRegression()
lr.fit(train_scaled, y_train)
# 테스트 데이터로 예측
y_pred = lr.predict(test_scaled)
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"모델 정확도: {accuracy * 100:.2f}%")
이 코드는 아이리스 붓꽃을 이진 분류하는 코드입니다.
코드를 읽어 보면서 흐름을 아는것이 중요합니다.
이해가 안 되더라도 한 번씩 읽어보는것을 권장합니다.
코드에 대한 설명(훈련 세트와 테스트 세트는 왜 나눌까?, 데이터 전처리가 무엇일까? 등등)은 꼭 설명을 하겠습니다.
언제나 배우며 성장하는 학생입니다.
정리한 것 중 잘못된 거나 추가 사항이 있으시다면 피드백을 남겨주시면 정말 감사하겠습니다.
이메일 : hyohyeonkim08@gmail.com
'Ei(Ez Ai)' 카테고리의 다른 글
🦕SVM이란??(Ei : Ez Ai) (0) | 2024.11.17 |
---|---|
💣릿지 & 라쏘 회귀란??(Ei : Ez Ai) (4) | 2024.11.02 |
🛬손실함수와 경사하강법이란??(Ei : Ez Ai) (2) | 2024.10.20 |
🌲의사결정 트리란??(Ei : Ez Ai) (6) | 2024.10.05 |
🦢선형 회귀란 무엇일까?? (Ei : Ez Ai) (2) | 2024.09.23 |