민준이 블로그에영

분류하는 뉴런 만들기 (로지스틱 회귀를 위한 뉴런 개발) - Do it! 딥러닝 입문 본문

Study/Do it! 딥러닝 입문

분류하는 뉴런 만들기 (로지스틱 회귀를 위한 뉴런 개발) - Do it! 딥러닝 입문

alswns8081 2025. 4. 20. 15:41

분류용 데이터 세트를 준비한다

  • 2진 분류에 대한 데이터 세트를 준비할 예정
    • 양성 샘플 → 1 (악성)
    • 음성 샘플 → 0 (정상) - 해결 과제

 

데이터 세트 준비하기

  • 569개의 원소가 있고, 30개의 특성이 있다.

 

박스 플롯(상자 수염 그래프) 그려서 데이터 파악하기

  • 1사분위 - 25% 까지의 값
  • 3사분위 - 75% 까지의 값
  • 수염 - 데이터의 분포를 표시
    • 대부분의 value들이 0에 가까운 작은 값으로 이루어짐을 확인할 수 있다.
    • 4번째 데이터와 41번째 데이터만 큰 값을 가지고 있다.

 

타깃 데이터를 확인하고 훈련 데이터를 준비하기

  • numpy의 unique 함수를 사용해서 표현 → target에 있는 unique한 값들만 가져온다.
  • return_counts=True
    • 0의 개수 212
    • 1의 개수 357
    • 약 1.6 ~ 1.7배 정도 양성 데이터가 더 많이 존재한다.

 

로지스틱 회귀를 위한 뉴런을 만든다.

  • 모델을 훈련 → 모델의 성능을 평가
  • 훈련과 평가에서 같은 데이터를 사용한다면, 당연히 좋은 결과가 나올 것이다 → 규칙이 존재
    • 훈련 데이터 세트를 나눌 때는 테스트 세트가 훈련 세트가 더 많아야 한다.
    • 훈련 데이터 세트를 나누기 전에 양성, 음성 클래스가 훈련 세트나 테스트 세트의 어느 한쪽으로 편중되지 않도록 골고루 섞어야 한다.

 

훈련 세트와 테스트 세트로 나누기

  • 전체 데이터 세트 클래스의 비율이 2:1이라면, 훈련과 테스트 세트도 2:1로 설정하는 것이 옳은 방법이다.

 

로지스틱 뉴런 구현하기

  • 3장에서 배운 Neuron 클래스와 유사하다.
    • w와 b를 1로 미리 초기화했었음.
  • 로지스틱 뉴런을 설정할 때 가중치와 절편을 미리 초기화 하지 않는다.
  • 입력 원소가 여러 개이므로, numpy 함수를 통해서 z 값을 계산한다.

 

나머지 메서드 구현하기

  • w와 b를 초기화하지 않았는데, fit 메서드를 만들어서 x의 두 번째 차원(열의 개수)을 보고 다 1로 채우도록 하겠다
    • self.w = np.ones(x.shape[1])
  • sigmoid 함수를 적용하는 부분을 추가
  • 예측하는 부분 구현
    • 새로운 데이터 x가 들어오면 x_i에 집어넣고 정방향 계산을 진행하고 결과 값을 list에 삽입
    • list에 활성화 함수를 적용하고 이는 결과 a
    • if a > 0.5 → 1, else → 0

 

모델을 훈련하고 결과를 확인하자

  • 클래스를 만들고, fit 메서드를 호출해서 w와 b를 초기화 시킨다.
  • np.mean 함수를 적용해서 예측한 결과를 평가한다 (확률)

 

결론

직접 로지스틱 회귀용 뉴런을 만들어보면서, 모델 구현, 평가까지 전체 흐름을 하나하나 직접 해볼 수 있었다.

특히 시그모이드 함수를 통해 확률 값을 구하고, 그 확률이 0.5 이상이면 1, 아니면 0으로 분류하는 로직을 코드로 구현하면서
로지스틱 회귀가 어떻게 작동하는지 확실하게 이해할 수 있었다.

fit() 메서드 안에서 자동으로 가중치와 절편을 초기화하고, 예측 결과를 바탕으로 정확도를 평가해보는 과정은 모델이 어떻게 학습하고 예측하는지 구조를 파악할 수 있는 실습이었다.

다음에는 이 구조를 확장해서 다중 클래스 분류나 신경망 형태로 확장해보면 더 재미있을 것 같다.
이제 정말 "로지스틱 회귀가 뭔지" 말로만이 아니라, 직접 만들어서 설명할 수 있는 수준이 된 느낌이다.

 

지피티로 결론 부분을 작성해봤는데 내가 생각한 결론이랑 비슷해서 조금 수정해서 작성했다. 그런데 직접 만드는거는 Python 실력이 부족해서 실질적으로 힘들거 같고, 이론적인 부분은 이해가 되서 주변 사람들에게 설명할 정도는 된거 같다. AI 공부를 일단 좀 열심히 하고 Python 공부도 계속.... 해야겠지...... 네, 다들 파이팅입니다!