관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

머신러닝 13 - 선형 분류 모델 실습해보기 5 : 직원 이직 분석 실습으로 본 모델 복잡도와 하이퍼 파라미터 튜닝에 대하여 본문

인공지능/머신러닝

머신러닝 13 - 선형 분류 모델 실습해보기 5 : 직원 이직 분석 실습으로 본 모델 복잡도와 하이퍼 파라미터 튜닝에 대하여

huenuri 2024. 9. 19. 00:49

이제 하이퍼 파라미터 튜닝에 대한 학습부터 나머지 부분을 진행해볼 것이다. 밤 11시가 다 되었지만 아직 졸리지는 않고 공부를 더 할 수 있을 것 같다. 오늘은 최대한 늦게까지 취침하지 않고 버텨볼 것이다.


 

 

 

 

직원 이직 예측 실습해보기

파라미터 중에서 사람이 직접 입력해서 작성하는 부분을 하이퍼 파라미터라고 한다.

 

모델의 상태에 따라 다음으로 분류할 수 있다. 

  1. 과대적합 : 훈련 데이터의 성능은 좋지만 평가 데이터의 성능이 좋지 못하다
  2. 과소적합 : 훈련용 데이터도 새로운 평가용 데이터 성능도 둘다 좋지 못하다
  3. 일반화 : 훈련용 데이터와 평가용 데이터 성능도 모두 좋다

우리는 모델의 성능의 일반화를 추구해야 한다. 데이터 상태, 하이퍼 파라미터에 따라 모델의 성능 상태가 변경된다.

 

  1. 데이터 측면 : 데이터가 많으면 모델은 새로운 상황에 맞출 수 있는 성능으로 발전

      - 편향된 데이터는 좋지 못하고 다양한 데이터를 모아야 함

 

  2. 모델 튜닝 측면 : 모델을 처음 생성하면 디폴트 값으로 파라미터를 가짐

    - 값을 수정하면서 과대적합이나 과소적합에서 일반화로 바꾸어주는 작업을 해야 함

 

 

KNN은 주변에 있는 데이터를 확인하고 가장 가까운 곳의 데이터를 예측하는 것이다. KNN은 주변의 이웃을 몇 개로 할지 파라미터로 설정한다. 선형 회귀나 분류에서도 파라미터를 하나씩 갖게 되는데 이를 통해서 성능을 끌어올린다.

모델의 성능을 가장 끌어올리는 기법은 데이터의 품질이 좋을 때이다. 지금은 대부분의 모델의 알고리즘이 비슷하고 좋은 수준이다. 이전에는 모델의 성능에 집중했지만 지금은 데이터의 품질의 데이터를 확보하는 것이 더 중요하다.

 

튜닝을 하는 것은 모델의 복잡도를 바꾸어주는 것이다. 모델의 복잡도는 모델이 얼마나 복잡하게 생각하는지, 단순하게 생각하는지 여부이다.


 

 

 

이 그래프는 역까지의 거리를 월세에 따라 어떻게 다른지 표현한 것이다. 중간이나 오른쪽으로 가면 선이 구부러지며 휘어지고 있다. 왼쪽 모델은 가장 단순한 모델이다. 오른쪽으로 갈수록 선이 데이터의 모양에 맞추려고 휘어진다. 즉 모델이 복잡하게 바뀌는 것이다. 왼쪽은 가장 단순한 모델, 오른쪽은 가장 복잡한 모델이라고 할 수 있다.

파라미터를 조절하면 이렇게 모델의 복잡도가 바뀐다. 세 개 중에서 모델의 복잡도가 좋아보이는 것은 무엇일까? 두번째 것이다. 중간 정도의 복잡도를 가지는 것이 현재 데이터를 가장 잘 설명하는 모델이다. 이러한 것을 유도하는 것이 하이퍼 파라미터 튜닝이다.

 

 

 

모델이 단순하면 규칙이나 패턴을 찾아낼 수 있는 성능이 좋지 못해서 좋은 모델이라고 할 수 없다. 그렇기에 훈련용이나 평가용 데이터에 대한 성능이 잘 나오지 않는다. 학습률이 너무 떨어져 과소적합이 될 가능성이 높다.

모델이 복잡하면 해석이나 암기할 수 있는 능력이 발달해 있는 상황이다. 자신이 학습한 훈련 데이터만 잘 맞추려고 하게 된다. 하지만 모델링에서 가장 중요한 것은 훈련용이 아닌 새로운 데이터를 잘 맞추는 능력이 중요하다.

 

따라서 모델의 복잡도가 올라가면 훈련 데이터의 성능은 계속 상승하지만, 어느 순간이 되면 테스트 데이터의 성능이 급격히 하락하는 증상을 보인다. 이러한 상황을 과대적합이라고 한다.

일반화는 훈련용과 테스트 데이터 성능이 모두 잘 상승하다가 이 선이 꺽이지 직전이 된다. 모델이 너무 단순하지도 복잡하지도 않는 상황으로 우리는 이것을 계속해서 만들어 내야 한다.


 

 

 

 

선형 분류 모델의 파라미터는 대문자 C를 사용하고 이를 규제 파라미터라고 한다. 값이 클수록 규제가 약해진다. 규제는 억누르는 것으로 가중치를 억누르는 것이다. 선형모델은 가중치를 학습하는데 y = wx + b에서 w가 최적이 되는 것이 가장 좋다. 여기서 우리는 규제 정도를 조절해서 w를 조절할 수 있다.

규제를 바꾸는 건 어떤 의미가 있을까? 적당한 규제를 주어 w값이 적당하게 만들어지면 선이 데이터에 잘 맞게 된다. 하지만 규제를 강하게 주면 그을 수 있는 선이 하락하게 되어 데이터를 벗어나는 선이 그려진다. 반대로 규제를 약하게 주면 선이 꼬불꼬불하는 현상이 발생한다. 

 

선형 모델은 이 규제값을 제어하여 적절한 선이 만들어지도록 할 수 있다.


 

 

 

 

이 규제값이 1.0으로 설정되어 있다. 이 규제값을 높이거나 낮춰서 조절할 수 있다.

 

 

 

 

훈련용 데이터의 결과를 시각화하고 있다. 이제 평가용 데이터를 테스트해볼 것이다.

 

 

 

 


 

 

 

 

랜덤 수를 바꾸면 그래프가 달라진다.

 

 

 

 

어느 점에서 시작하더라도 모델이 최적화될 수 있는 지점까지 유도하기 때문에 상관 없다.


 

 

 

 

교차 검증과 하이퍼파라미터 튜닝을 섞은 방법이다. 어느 데이터의 성능이 가장 좋을지 판단하는 것은 테스트 데이터이다. 훈련 데이터는 이 모델이 학습을 제대로 하고 있는지 판단하기 위해 확인하는 것이다. 과대적합인지 과소적합인지 판단하는 것은 테스트 데이터로 할 수 있다.

테스트 데이터를 여러 개 만들어서 성능이 좋은지 판단하는 것이 좋다.

 

 

 

 

 

 


 

 

 

학습을 마치고

선형 회귀와 선형 분류를 비교하면서 학습해볼 수 있어서 더욱 이해가 잘 되었다. 이제 12시가 넘어 눈이 감기지만 그래도 오늘 해야 할 분량은 꼭 마치고 취침하려고 한다.

평가 지표에 대한 부분만 학습하면 선형 분류 모델은 끝날 것 같다.