AI

[AI 도전기 8일차] 분류 모델에서 확률 구하기 : 로지스틱 회귀와 확률적 경사 하강법

alsruds 2024. 4. 3. 23:59

 

이름은 회귀이지만 분류 알고리즘의 하나인 로지스틱 회귀에 대해 알아보자 - !

(😋이름에 회귀가 들어가는 이유는 선형 알고리즘을 사용하기 때문이당)

 

https://www.youtube.com/playlist?list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q

 

[완결] 혼자 공부하는 머신러닝+딥러닝

[혼자 공부하는 머신러닝+딥러닝] 강의 동영상 혼자 공부하는 머신러닝+딥러닝: https://tensorflow.blog/hg-mldl 깃허브: https://github.com/rickiepark/hg-mldl 유튜브: http://bit.ly/hg-mldl-youtube

www.youtube.com


9강. 로지스틱 회귀 알아보기

📍 시나리오

도미와 빙어, 둘 중에 한 마리의 생선이 나오는 럭키백이 있다!
각각의 확률은 어떻게 될까?

- K-최근접 이웃 알고리즘
- 로지스틱 회귀 알고리즘 (이진 분류)
- 로지스틱 회귀 알고리즘 (다중 분류)

 

확률 예측 → 분류

➡️ 분류 모델에서 확률 가져오는 방법

 

 

1. K-최근접 이웃 알고리즘으로 확률 계산하기

 

- 가까운 K 개의 이웃 찾기

- 이웃한 샘플 클래스의 비율로 확률을 예측한다

- 단점 : 확률이 0, 1/3, 2/3, 1 로만 나온다

 

 

2. 로지스틱 회귀 알고리즘으로 확률 계산하기 (이진 분류)

 

2-1. 로지스틱 회귀란?

 

- 대표적인 분류 알고리즘

- 인공 신경망의 기본 알고리즘

≒ 선형 알고리즘

 

- z 의 범위가

  -∞ ~ ∞ 라면 선형 회귀,

  0 ~ 1 이면 분류이다

 

- 결과값 > 0.5 : 양성 클래스

- 결과값 < 0.5 : 음성 클래스

- 결과값을 계산하지 않더라도, z 값이 0보다 크면 양성 클래스, 작으면 음성클래스이다

  → decision_function

 

2-2. 로지스틱 회귀 (이진 분류)

 

- predict_proba : 각 샘플에 대해 어느 클래스에 속할 확률을 0에서 1 사이의 값으로 돌려준다 🔗

➡️ [[ 도미일 확률, 빙어일 확률 ] [..] .. ]

 

 

 

 

 

 

2-3. 로지스틱 회귀 계수 확인하는 법

 

- decision_function : z 값 출력

- expit(decisions) : 확률값 도출

  = 이진 분류에서 양성 클래스일 확률과 같다

 

 

 

 

 

 

 

3. 로지스틱 회귀 알고리즘으로 확률 계산하기 (다중 분류)

 

- 반복적인 알고리즘 사용

- max_iter = 1000 : 반복 횟수

- C : 규제 매개변수 (기본값 1)

  - L2 규제가 기본적으로 적용되어 있다

  - C ↑ : 규제 ↓

 

- 7개의 행과 5개의 열 (7개의 선형 함수)

- z 가 7개 → 7개 시그모이드 합 = 1

 

 

10강. 확률적 경사 하강법 알아보기

📍 시나리오

기존의 모델에 새로운 데이터를 추가할 때 마다 새로운 훈련을 해야할까?
기존 모델을 유지하면서 업데이트하는 방안을 고려해보자!

 

기존 모델 유지 = 가중치, 절편 유지

➡️ 점진적 학습, 온라인 학습

➡️ 확률적 경사 하강법 (SGD)

 

 

💡 확률적 경사 하강법

 

- 알고리즘 훈련 방법

- 확률적 = 랜덤

- 경사 = 기울기

✅ 무작위하게 경사를 내려가는 방법

 

- 가장 가파른 경사를 찾아 조금씩 내려가야 한다

  → 최적점 찾기

 

1. 훈련 세트에서 샘플을 하나씩 꺼내기

  - 다 꺼냈다 = 1 epoch 완료

2. 세트를 다시 채워서 다시 시작하기

  - epoch 여러 번 반복

 

훈련 세트와 테스트 세트 간격이 제일 좁은 곳이 최적점이다

 

- 규제 ↑ : 과소적합

- 규제 ↓ : 과대적합

- epoch 를 많이 실행할수록 훈련 세트의 정확도는 높아지지만, 테스트 세트의 정확도는 어느 순간부터 낮아진다

- 100 정도의 epoch 가 적당하다 (max_iter = 100)

 

 

💡 손실 함수 계산으로 정확도 높이기

 

- 나쁜 정도를 측정하는 함수

- 값이 낮을수록 좋다

- 분류에서는 정확도로 판단

- 비어있는 구간은 정확도를 측정할 수가 없기 때문에 정확도는 손실 함수로 사용할 수 없다 (미분 불가능)

 

cf) 회귀에서 손실 함수는 측정 지표로 사용

 

 

분류일 때 사용 가능

 

- 음수 부호를 붙여 정답과의 거리를 계산한다

- loss = 'log' : 로지스틱 손실 함수 지정

- max_iter = epoch

- partial_fit : 기존 학습 유지

- 정확도가 향상된다

- 배치, 미니 배치는 지원하지 않는다

- 과소적합 → max_iter ↑ → 과대적합