일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 기계학습
- lambda
- 네트워크 기초
- 머신러닝
- 코딩테스트
- 디자인 패턴
- OOP
- ack
- java
- 넘파이 기초
- 차원축소
- Machine Learning
- NumPy
- 넘파이 배열
- 합성곱 신경망
- 데이터 마이닝
- numpy 기초
- 코딩테스트실력진단
- c++
- 코드트리
- 코테
- cpp
- 클러스터링
- python
- 자바
- 넘파이
- cpp class
- 데이터 분석
- Design Pattern
- 파이썬
- Today
- Total
준비하는 대학생
[기계학습] 로지스틱 회귀 (Logistic Regression) 본문
로지스틱 회귀란
일반적인 선형 회귀는 연속적인 값을 예측하는 데 사용되지만, 로지스틱 회귀는 이진 분류 문제(binary classification)를 해결하는 데 적합합니다. 예를 들어, 이메일이 스팸인지 아닌지, 환자가 특정 질병을 가지고 있는지 여부 등을 판별할 수 있습니다.
동작 원리
- 선형 결합: 우선, 입력 특성들과 각 특성에 대응하는 가중치들을 곱한 값을 모두 합하여 선형 결합(Linear Combination)을 구합니다.
$$ z = b+x_1w_1+x_2w_2+...+x_nw_n $$
여기서 w는 기울기, 는 특성 값입니다. b 는 절편(편향,bias)입니다. - Logit을 확률로 변환: 이 선형 결합 값을 Logit 함수의 역함수인 Sigmoid 함수에 통과시켜서, 0과 1 사이의 확률값을 얻습니다.여기서 p는 양성 클래스(1)로 분류할 확률입니다.
- 분류 결정: 마지막으로, 얻어진 확률값 를 기준으로 분류 결정을 합니다. 일반적으로, 가 0.5 이상이면 양성 클래스(1)로, 그렇지 않으면 음성 클래스(0)로 분류합니다.
모델 학습
로지스틱 회귀 모델을 학습시키는 과정은 가중치를 조정하여 실제 값과 예측 값 사이의 차이를 최소화하는 것으로 구성됩니다. 이를 위해 로그 손실(log loss) 같은 손실 함수를 사용합니다.
$$ L(Y,p) = -Ylog(p)-(1-Y)log(1-p) $$
손실 함수를 최소화하는 기울기를 찾기 위해, 경사 하강법(gradient descent) 같은 최적화 알고리즘을 사용하여 반복적으로 가중치를 업데이트합니다.
로지스틱 회귀에서 경사하강법
손실 함수 L에 대해, 각 기울기 w 에 대한 편미분을 구하고, 이를 사용하여 가중치를 업데이트합니다.
$$ w = w - \alpha \frac{\partial L}{\partial w_i} $$
$$ \frac{\partial L}{\partial a} = -Y\frac{1}{a}-(1-Y)\frac{1}{1-a}(-1) = -\frac{Y}{a}+\frac{1-Y}{1-a} $$ $$ \frac{\partial a}{\partial z} = -(1+e^{-z})^{-2}(-e^{-z})= \frac{e^{-z}}{(1+e^{-z})^2}= \frac{1}{(1+e^{-z})} \frac{1+e^{-z}-1}{(1+e^{-z})}= \frac{1}{(1+e^{-z})} (\frac{-1}{(1+e^{-z})} +1) = a(1-a) $$ $$ \frac{\partial z}{\partial w_i} = x_i $$ $$ \frac{\partial L}{\partial w_i} = \frac{\partial L}{\partial a}\frac{\partial a}{\partial z}\frac{\partial z}{\partial w_i} =(-\frac{Y}{a}+\frac{1-Y}{1-a})(a(1-a))x_i $$ $$ =(-Y(1-a)+a(1-Y))x_i=-Yx_i +aYx_i+ax_i-aYx_i = ax_i-Yx_i=(a-Y)x_i $$ $$ w_i = w_i -(-(Y-a)x_i) * \alpha(leaning\ rate)) $$
위 식 대로 파라미터를 업데이트해 손실함수를 최소화하는 파라미터를 찾아 선형 결합을 통해 입력 특성과 기울기를 결합하고, Sigmoid 함수를 통해 확률을 얻은 다음, 그 확률을 기반으로 분류 결정을 내리는 방식으로 동작합니다. 이 과정을 통해 새로운 데이터에 대한 분류 문제를 해결할 수 있습니다.
실습 예제
Python을 사용하여 간단한 로지스틱 회귀 모델을 학습시켜 봅시다. scikit-learn 라이브러리를 사용하겠습니다.
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
# 데이터셋 로드 (붓꽃 데이터셋)
iris = datasets.load_iris()
X = iris.data
y = (iris.target == 2).astype(int) # Virginica 종만 Positive로 설정
# 데이터를 훈련 세트와 테스트 세트로 분할
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)
# 테스트 세트에 대한 정확도
accuracy = model.score(X_test, y_test)
print(f'Accuracy: {accuracy}')
Accuracy: 1.0
결론
로지스틱 회귀는 기계 학습에서 매우 기본적이면서도 효과적인 분류 알고리즘입니다. 이진 분류 문제를 해결하는 데 유용하며, Sigmoid 함수를 기반으로 확률을 모델링합니다.
'Programming > Machine learning' 카테고리의 다른 글
[기계학습] 차원축소 - LDA (0) | 2023.06.22 |
---|---|
[기계학습] 평가지표 (0) | 2023.06.19 |
[기계학습] 선형회귀 모델 (2) | 2023.06.09 |
[기계학습] 에이다부스트, 그래디언트 부스트 (0) | 2023.06.08 |
[기계학습] 앙상블 학습 - 랜덤포레스트(Random Forest) (0) | 2023.06.08 |