혼공학습단 10기

[혼공학습단10기] 혼자 공부하는 머신러닝 + 딥러닝 3주차 Ch_4 다양한 분류 알고리즘

부지런한 지구인 2023. 7. 22. 22:15

04-1 로지스틱 회귀

 

k-최근접 이웃 분류기

 

데이터 준비하기

데이터준비하기

 

k-최근접 이웃 분류기의 확률 예측

k-nn score

 

다중 분류

- multi class classification

- 타깃 데이터에 2개 이상의 클래스가 포함된 문제

target classes

 

5개 샘플의 예측 결과

5개 샘픔의 예측 클래스
5개 샘플 예측의 확률

 

5개중 4번째 샘플 결과 분석

 

4번째 샘플의 3개의 최근접 클래스

 

k-최근접 이웃의 한계

- 가능한 확률값이 정해져 있다.

   -> k=3인경우, 0/3, 1/3, 2/3, 3/3만 가능

 

 

로지스틱 회귀

- logistic regression

- z = a x (Weight) + b x (Length) + c x (Diagonal) + d x (Height) + e x (Width) + f

- 확률값은 0 ~ 1의 값을 가진다.

- z가 큰 음수일 때 0

  z가 큰 양수일 때 1

  -> 시그모이드 함수(sigmoid function)

시그모이드 함수

 

로지스틱 회귀로 이진 분류 수행하기

도미와 빙어 이진분류

데이터 준비하기

도미와 빙어 데이터 필터링

 

로지스틱 회귀

로지스틱 회귀 훈련 및 5개 샘플 분류

 

학습 결과 분석

 

첫번째 열이 음성, 두번째 열이 양성

Bream 음성, Smelt 양성

 

회귀 모델 방정식의 계수

회귀모델 방정식 계수

 

계산 결과

방정식 계산 결과

 

 

로지스틱 회귀로 다중 분류 수행하기

LogisticRegression 클래스 특징

- 반복적인 알고리즘 사용, max_iter

- 릿지 회귀와 같이 계수의 제곱을 규제 ( = L2 규제 ), C

   -> C가 작을수록 규제가 커짐

 

훈련

다중 분류 룬련

 

5개 샘플 예측, 예측 확률

5개 샘플 예측
5개 샘플 예측 확률

 

계수 확인

- z를 7개 계산

   -> 클래스마다 z값을 각각 계산하여 가장 큰 값의 z값을 출력하는 클래스가 예측 클래스가 된다.

- 소프트맥스(softmax)함수를 사용하여 7개의 z값을 확률로 변환

로지스틱 회귀 방정식 계수

 

z값 계산 및 소프트맥스 계산

확률 계산

 

기본 미션

2. 로지스틱 회귀가 이진 분류에서 확률을 출력하기 위해 사용하는 함수는 무엇인가요?

1) 시그모이드 함수

2) 소프트맥스 함수

3) 로그 함수

4) 지수 함수

 

정답 - 1)

풀이 - 소프트맥스 함수의 경우 다중 분류에서 사용한다.

 

 

04-2 확률적 경사 하강법

 

점진적인 학습

- 먼저 학습한 모델을 버리지 않고 새로운 데이터에 대해서만 조금씩 더 훈련

- 확률적 경사 하강법( Stochastic Gradient Descent )

   -> 대표적인 점진적 학습 알고리즘

 

확률적 경사 하강법

- 경사 하강법 : 가장 가파른 경사를 따라 원하는 지점에 도달하는 것

- 확률적 : 전체 샘플을 사용하지 않고 하나의 샘플을 훈련 세트에서 랜덤하게 골라 가장 가파른 길을 찾는 것

- 확률적 경사 하강법

   -> 훈련 세트에서 랜덤하게 하나의 샘플을 선택하여 가파른 경사를 조금 내려간다.

   -> 다음 훈련 세트에서 랜덤하게 또 다른 샘플을 하나 선택하여 경사를 조금 내려간다.

   -> 전체 샘플을 모두 사용할 때까지 반복

- 모든 샘플을 다 사용했는데도 원하는 지점에 도달하지 못한 경우?

   -> 훈련 세트에 모든 샘플을 다시 채워 넣어서 다시 램덤하게 하나의 샘플을 선택해서 경사를 내려간다

   -> 에포크( epoch ) : 확률적 경사 하강법에서 훈련 세트를 한 번 모두 사용하는 과정

- 미니배치 경사 하강법 (minibatch gradient descent )

   -> 1개씩 말고 무작위로 몇 개의 샘플을 선택해서 경사를 내려감.

- 배치 경사 하강법 ( batch gradient descent )

   -> 전채 샘플을 사용하여 경사로를 따라 이동.

 

손실 함수

- loss function

- 어떤 문제에서 머신러닝 알고리즘이 얼마나 엉터리인지를 측정하는 기준

- 값이 작을 수록 좋다. 그러나 최솟값은 모른다.

- 가능한 많이 찾아보고 만족할만한 수준을 찾는다.

- 샘플 하나에 대한 손실을 정의

- cost function : 훈련 세트에 있는 모든 샘플에 대한 손실 함수의 합

 

로지스틱 손실 함수

- logistic loss function, binary cross-entropy loss function

- 양성 클래스(target = 1)일 때 손실 : -log(예측확률)

- 음성 클래스(target = 0)일 때 손실 : -log(1-예측확률)

- 양성 클래스인 경우

   -> 예측 x 타겟

     ex) 0.9 x 1 -> -0.9

- 음성 클래스인 경우

   -> (1-예측) x 타겟

     ex) 0.2 -> 0.8, 0 -> 1

           0.8 x 1 -> -0.8

- log를 사용하는 이유

  -> 에측 확률의 범위가 0 ~ 1 사이 -> 로그 함수는 이 사이에서 음수가 된다.

  -> 로그 함수는 0에 가까울 수록 아주 큰 음수가 된다.

- -log를 사용하는 이유

   -> log가 음수이므로 -log는 양수가 되어 이해하기 쉽다.

   -> -log는 0에 가까울 수록 아주 큰 양수가 된다.

- 다중 분류

   -> 크로스 엔트로피 손실 함수 (cross - entropy loss function)

-회귀

   -> 평균 제곱 오차 (mean squared error)

 

SGDClassifier

데이터 준비하기

SGDClassifier 데이터 준비하기

 

손실함수 지정

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

수행할 에포크 횟수

- max_iter = 10 : 전체 훈련 세트를 10회 반복

 

SGDClassifer 수행 결과

-> 훈련 세트와 테스트 세트 정확도가 낮다

-> 10회 반복은 부족

 

partial_fit()

-> 모델을 이어서 훈련

추가 에포크 수행

-> 훈련 세트와 테스트 세트의 정확도가 향상됨.

 

 

에포크 과대/과소 적합

- 에포크 횟수가 적음

   -> 모델이 훈련 세트를 덜 학습

   -> 과소적합

- 에포크 횟수가 충분함

   -> 모델이 훈련 세트를 완전히 학습 

   -> 과대적합

- 훈련 세트 점수는 에포크가 진행될소룩 꾸준히 증가

- 테스트 세트 점수는 어느 순간 감소하기 시작

   -> 이 지점이 과대적합이 시작하는 지점

 

조기종료

- early stopping

- 과대 적합이 시작하기 전에 훈련을 멈춤

 

실습

에포크 0 ~ 300 훈련

 

선택 미션

에포크 0 ~ 300 훈련 세트, 테스트 세트 점수

-> 백 번째 에포ㅌ크 이후에는 훈련 세트와 테스트 세트의 점수가 조금씩 벌어지는 것으로 보임

-> 에포크 초기에는 과소적합되어 훈련 세트와 테스트 세트의 점수가 낮음.

-> 에크포 100이 적절한 반복 횟수로 보임

 

에포크 100일때 훈련

SGDClassifier 특징

-> 일정 에포크 동안 성능이 향상되지 않으면 자동으로 멈춤.

-> tol 매개변수로 향상될 최솟값을 지정

-> loss의 기본값은 'hinge' : 서포트 벡터 머신을 위한 손실 함수