갓생 살고 싶은 대학생 블로그
article thumbnail
혼공머신 (머신러닝+딥러닝) 3주차 미션

기본미션 : chapter 4-1의 2번 문제 풀고 과정 설명

 

이번 챕터에서는 로지스틱 회귀를 다룬다

로지스틱 회귀(logistic regression)은 회귀이지만 분류 모델로, 선형 회귀와 동일하게 선형 방정식을 학습한다

선형 회귀는 하나의 특성을 사용한 선형 회귀, 다중 회귀는 여러 개의 특징을 사용한 선형 회귀이다 

 

선형 방정식에서의 z값은 범위가 정해져 있지 않지만, 확률이 되려면 0과 1 사이의 값이 되어야 한다

이때 이진 분류에서는 시그모이드 함수(로지스틱 함수)를 사용하여 아주 큰 음수는 0으로, 아주 큰 양수는 1로 바꿔준다

 

문과이기 때문에 정확히 수식을 설명하기는 어렵지만...

자연상수 e를 거듭제곱하고 1을 더한 값의 역수를 취하는 함수라고 한다

글씨만 봐서는 이해가 안되기 때문에 직접 그래프를 그려보겠다

 

그래프를 그리면 이렇게 나온다

0과 1 사이의 범위에서 값이 나오는 것을 알 수 있다

 

로지스틱 회귀로 이진 분류를 수행해보겠다

 

 

비교 연산자를 통해 도미와 빙어를 비교한 결과로 도미와 빙어에 대한 행만 골라냈다

bream_smelt_indexes 배열에는 도미와 빙어일 경우 True 값, 이외의 모든 경우에는 False값이 들어가 있다

이를 통해 불리언 인덱싱(넘파이에서 True, False 값으로 행 선택)으로 train_scaled와 train_target에 도미와 빙어 데이터만 넣는다

 

 

그리고 이 데이터를 이용하여 로지스틱 회귀 모델을 훈련시킨다

훈련한 모델을 사용해 train_bream_smelt에 있는 앞 5개 샘플을 예측해본다

 

 

두 번째 샘플 제외 모두 도미로 예측했다

그 다음 예측 확률을 확인하기 위해 predict_proba()메서드를 사용하여 처음 5개 샘플의 확률을 출력했다첫번째 열은 음성 클래스(0)에 대한 확률, 두번째 열은 양성 클래스(1)에 대한 확률이다 predict_proba()메서드의 출력 순서는 classes_ 속성과 같기 때문에 이를 출력해보면 무엇이 양성 클래스인지 알 수 있다

smelt(빙어)가 양성 클래스임을 알 수 있다

 

이제 로지스틱 회귀 모델이 학습한 계수와 선형 방정식을 확인해보겠다

 

 

해당 모델이 학습한 방정식은 z = -0.404 * weight -0.576 * length -0.663 * diagonal - 1.013 * height - 0.732 * width - 2.161임을 알 수 있다

 


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

답은 1번 시그모이드 함수 이다

 

시그모이드 함수는 z를 0과 1 사이의 값으로 바꿔주는 함수로, 이진 분류에서 사용된다

 

다중 분류에서는 소프트맥스 함수를 사용한다소프트맥스 함수는 여러 개의 선형 방정식의 출력값을 -=0과 1 사이의 값으로 압축하고 전체 합이 1이 되도록 만드는 함수이다


 

선택 미션 : chapter 4-2 의 과대적합/과소적합 손코딩 화면 캡쳐

 

확률적 경사 하강법이란 점진적 학습 알고리즘의 한 종류로,

훈련 세트에서 하나의 샘플을 골라 경사를 내려가는 방식이다

훈련 세트에서 샘플을 하나씩 골라 연속적으로 경사를 내려가고, 모든 샘플을 다 사용했을 때는 처음부터 다시 선택한

확률적 경사 하강법에서 훈련세트를 한 번 모두 사용하는 과정을 에포크라고 한다

 

손실 함수란 머신러닝 알고리즘을 적용했을 때 얼마나 좋지 않은지를 측정하는 기준이 되는 함수이다

따라서 손실 함수의 값이 작을수록 좋다

분류 문제에서의 손실은 문제를 맞추지 못하는 것을 의미한다

 

 

각 에포크마다 훈련 세트와 테스트 세트에 대한 점수를 기록하기 위해 두 개의 리스트를 만든다

 

 

그리고 300번의 에포크 동안 훈련을 반복했다

반복할 때마다 훈련 세트와 테스트 세트의 점수를 계산하여 train_score와 test_score에 각각 append한다

 

 

matplotlib로 그래프를 그려보면 100번째 에포크 이후 훈련 세트와 테스트 세트의 점수 차가 점점 벌어지는 것을 확인할 수 있다

에포크 초기에는 과소적합되어 훈련 세트와 테스트 세트의 점수가 모두 낮다

그러므로 해당 모델에서는 100번째 에포크가 적절한 반복 횟수로 볼 수 있다

 

 

max_iter를 100으로 한 뒤 훈련시켰을 때 각 세트에서의 정확도 점수가 높은 수준으로 나온 것을 확인할 수 있다

tol 매개변수를 None으로 지정하여 자동으로 멈추지 않고 100번동안 무조건 반복하게 했다

 

 

loss를 디폴트 값인 hinge로 해서도 훈련시켜 보았다

loss 매개변수에는 다양한 값이 들어갈 수 있기 때문에 다양한 손실 함수를 모델에 적용해볼 수 있다

 

 

profile

갓생 살고 싶은 대학생 블로그

@파도의 물보라

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!