본문 바로가기
데이터 분석

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

by JoinInNoetic 2023. 12. 12.

◆ 확률적 경사 하강법

- 머신러닝 모델이 아님

- 알고리즘을 학습할때 사용

- 머신러닝 알고리즘에 대한 최적의 매개변수 구성을 찾는 방법

- 손실함수 - 머신러닝 평가지표

- 어떻게 하면 손실이 적어질지 학습 -> 손실을 줄이기 위해 하나하나씩 학습

- 데이터가 끝나면 다시 데이터를 랜덤으로 뽑음(확률적) -> 한 사이클 : 1 epoch

<-> 미니배치하강법 - 조금도 많이씩 학습

<-> 배치하강법 - 모두 가져와 학습

 

● 이진 크로스 엔트로피 손실함수 -> 분류모델의 손실값을 정의하는 함수

- 실제 샘플이 양성클래스면 1에 가까울수록 좋은 예측이므로 예측값에 -1을 곱해 음수를 취한다.

  1에 가까울수록 작은 손실을 만들어 줄 수 있다.

- 실제 샘플이 음성클래스면 0에 가까울수록 좋은 예측이므로 1에서 예측값을 뺀 후 -1을 곱해 음수를 취한다.

예측 1 0 0 1
확률 0.9 0.3 0.1 0.7
    X    
실제  1 1 0 0
변환 0.9 * -1 0.3 * -1 (1-0.1) * -1 (1-0.7) * -1
손실 -0.9 -0.3 -0.9 -0.3

                                                   (맞힌 값)            <            (틀린 값)                       (맞힌 값)           <            (틀린 값)             # 보통 -log를 취해서 손실로 사용

 

◆ 데이터 준비

 

◆ 확률적 경사 하강법 모델 학습

from sklearn.linear_model import SGDClassifier

sc = SGDClassifier(loss='log_loss', max_iter= )    # loss='log_loss'  : 손실함수  /  max_iter : epoch(반복횟수)

sc.fit()

sc.score()

sc.partial_fit()    # 에폭 1회 늘리기 - epoch을 다시 설정할필요 없이 1회씩 늘릴 수 있음

 

● 에포크와 과대/과소적합

- 에포크가 낮으면 과소적합, 높으면 과대적합이 일어날 가능성이 높음

for _ in range(0,300):    # 대입하는 변수없이 횟수로 그냥 반복

    sc.partial_fit()

# 0~50 : 과소적합, 250~300 : 과대적합

# 과대적합이 일어나기 직전까지 최대한 학습하는 것이 좋다

 

※ tol=None - 중지하지 않고 사용자가 설정한 값 모두 실행

# 보통 점수에 변화가 없으면 과대적합이 될수있어 중지됨

sc = SGDClassifier(loss='log_loss', max_iter=, tol=None)

'데이터 분석' 카테고리의 다른 글

Cross_Validation(교차검증) & GridSearchCV  (0) 2023.12.13
Decision_Tree(의사결정나무)  (0) 2023.12.12
Logistic_regression  (0) 2023.12.12
Feature_engineering  (0) 2023.12.12
LinearRegression  (0) 2023.11.17