상세 컨텐츠

본문 제목

혼공단 머신러닝+딥러닝 3주차 미션 - Chapter 04

Developer/혼공단

by cepiloth 2022. 2. 22. 18:43

본문

728x90
반응형

기본 미션

3주차 Chapter 04 Ch. 04(04-1) 2번 문제 풀고, 풀이 과정 설명하기

04.1.2 로직스틱 회귀가 이진 분류에서 확률을 출력하기 위해 사용하는 함수는 무엇인가요?
1. 시그모이드 함수
2. 소프트맥스 함수
3. 로그 함수
4. 지수 함수

 로직스틱 회귀는 이진 분류에서는 하나의 선형 방정식을 훈련합니다. 이 방정식의 출력 값을 시그모이드 함수에 통과시켜 0~1 사이의 값을 만듭니다. 이 값이 양성 클래스에 대한 확률입니다. 음성 클래스의 확률은 1에서 양성 클래스의 확률을 빼면 됩니다.

 


선택 미션

Ch.04(04-2) 과대적합/과소적합 손 코딩 코랩 화면 캡쳐하기

import pandas as pd
fish = pd.read_csv('https://bit.ly/fish_csv_data')
fish.head()

fish_input = fish[['Weight', 'Length', 'Diagonal', 'Height', 'Width']].to_numpy()
fish_target = fish['Species'].to_numpy()
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(fish_input, fish_target, random_state=42)

from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)

from sklearn.linear_model import SGDClassifier

sc = SGDClassifier(loss='log', max_iter=10, random_state=42)
sc.fit(train_scaled, train_target)
print(sc.score(train_scaled, train_target))
print(sc.score(test_scaled, test_target))

sc.partial_fit(train_scaled, train_target)
print(sc.score(train_scaled, train_target))
print(sc.score(test_scaled, test_target))

import numpy as np
sc = SGDClassifier(loss='log', random_state=42)
train_score = []
test_score = []
classes = np.unique(train_target)

for _ in range(0, 300):
  sc.partial_fit(train_scaled, train_target, classes=classes)
  train_score.append(sc.score(train_scaled, train_target))
  test_score.append(sc.score(test_scaled, test_target))
  
import matplotlib.pyplot as plt
plt.plot(train_score)
plt.plot(test_score)
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.show()

 


용어정리

로직스틱 회귀는 선형 방정식을 사용한 분류 알고리즘입니다. 선형 회귀와 달리 시그모이드 함수나 소프트맥스 함수를 사용하여 클래스 확률을 출력할 수 있습니다.

다중 분류는 타깃 클래스가 2개 이상인 분류 문제입니다. 로직스틱 회귀는 다중 분류를 위해 소프트맥스 함수를 사용하여 클래스를 예측합니다.

시그모이드 함수는 선형 방정식의 출력을 0과 1 사이의 값으로 압축하며 이진 분류를 위해 사용합니다.

소프트맥스 함수는 다중 분류에서 여러 선형 방정식의 출력 결과를 정규화하여 합이 1이 되도록 만듭니다.

확률적 경사 하강법은 훈련 세트에서 샘플 하나씩 꺼내 손실 함수의 경사를 따라 최적의 모델을 찾는 알고리즘입니다. 샘플을 하나씩 사용하지 않고 여러 개를 사용하면 미니배치 경사 하강법이 됩니다. 한 번에 전체 샘플을 사용하면 배치 경사 하강법이 됩니다.

손실 함수는 확률적 경사 하강법이 최적화할 대상입니다. 대부분의 문제에 잘 맞는 손실 함수가 이미 정의되어 있습니다. 이진 분류에는 로직스틱 회귀(또는 이진 크로스엔트로피) 손실 함수를 사용합니다. 다중 분류에는 크로스엔트로피 손실 함수를 사용합니다. 회귀 문제에는 평균 제곱 오차 손실 함수를 사용합니다.

에포크는 확률적 경사 하강법에서 전체 샘플을 모두 사용하는 한 번 반복을 의미합니다. 일반적으로 경사 하강법 알고리즘은 수십에서 수백 번의 에포크를 반복합니다.

 

핵심 패키지와 함수

scikit-learn

LogisticRegression은 선형 분류 알고리즘인 로직스틱 회귀를 위한 클래스입니다. solver 매개변수에서 사용할 알고리즘을 선택할 수 있습니다. 기본값은 'lbfgs'입니다. 사이킷런 0.17 버전에 추가된 'sag'는 확률적 평균 경사 하강법 알고리즘으로 특성과 샘플 수가 많을때 성능은 빠르고 좋습니다. 사이킷런 0.19 버전에는 'sag' 개선 버전인 'saga'가 추가 되었습니다. penalty 매개변수에 L2 규제(릿지 바식)와 L1 규제(라쏘 방식)를 선택할 수 있습니다. 기본값은 L2 규제를 의미하는 'l2'입니다. C 매개변수에서 규제의 강도를 제어합니다. 기본값은 1.0이며 값이 작을수록 규제가 강해집니다.

SGDClassifier는 확률적 경사 하강법을 사용한 분류 모델을 만듭니다. loss 매개변수는 확률적 경사 하강법으로 최적화할 손실 함수를 지정합니다. 기본값은 서포트 벡터 머신을 위한 'hinge' 손실 함수입니다. 로직스틱 회귀를 위해서는 'log'로 지정합니다. penalty 매개변수에서 규제의 종류를 지정할 수 있습니다. 기본값은 L2 규제를 위한 'l2'입니다. L1 규제를 적용하려면 'l1'로 지정합니다. 규제 강도는 alpha 매개변수에서 지정합니다. 기본값은 0.00001입니다. max_iter 매개변수는 에포크 횟수를 지정합니다. 기본값은 1000입니다. tol 매개변수는 반복을 멈출 조건입니다. n_iter_no_change 매개변수에서 지정한 에포크 동안 손실이 tol 만큼 줄어들지 않으면 알고리즘이 중단됩니다. tol 매개변수의 기본값은 0.001이고 n_iter_no_change 매개변수의 기본값은 5입니다.

 

 

728x90
반응형

관련글 더보기

댓글 영역