AI

[AI 도전기 7일차] 회귀 알고리즘과 모델 규제에 대해 알아보자 !

alsruds 2024. 4. 2. 18:15

 

지도 학습은 분류회귀 알고리즘 2가지로 나눌 수 있는데,

예측하는 결과가 이름 혹은 문자라면 분류,

예측하는 결과가 임의의 숫자라면 회귀 알고리즘을 사용할 수 있습니다 🛠️

 

https://www.youtube.com/playlist?list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q

 

[완결] 혼자 공부하는 머신러닝+딥러닝

[혼자 공부하는 머신러닝+딥러닝] 강의 동영상 혼자 공부하는 머신러닝+딥러닝: https://tensorflow.blog/hg-mldl 깃허브: https://github.com/rickiepark/hg-mldl 유튜브: http://bit.ly/hg-mldl-youtube

www.youtube.com

 


 

6강. 회귀 문제를 이해하고 K-최근접 이웃 알고리즘으로 풀어보기

📍 시나리오
농어의 길이를 이용하여, 농어의 무게를 예측해보자 !
타깃 : 무게 (임의의 숫자)

 

1. 훈련 세트 & 테스트 세트 준비하기

 

- 분류 알고리즘과는 다르게 stratify 값을 사용하지 않았다

  - 임의의 숫자가 타깃이기 때문

  - false 가 기본값

 

- perch_length : 1차원 배열

  → train_input, test_input, train_target, test_target : 1차원 배열

  numpy 의 reshape 함수가 2차원 배열처럼 만들어준다

 

 

 

2. 회귀 모델 훈련 : K-최근접 이웃 회귀 알고리즘

- 훈련 세트로 knr 모델 훈련하기 : fit 함수 사용

- 테스트 세트로 정확성 판단하기 : score 함수 사용

 

 

3. 문제 발생 : 과소적합

 

➡️ 일반적으로, 테스트 세트 정확도가 훈련 세트의 정확도보다 낮다 (왼쪽은 반대의 경우 : 과소적합)

 

- 훈련 세트의 정확도 > 테스트 세트의 정확도 : 과대적합

- 훈련 세트의 정확도 < 테스트 세트의 정확도 : 과소적합

 

 

 

 

4. 문제 해결 : 이웃 개수 줄이기

 

➡️ 이웃의 개수를 5 → 3 으로 변경

➡️ 훈련 세트 정확도 상승 & 과소적합 문제 해결

 

 

 

 

 

 

 

 


 

7강. 사이킷런으로 선형 회귀 모델 만들어보기

📍 시나리오

길이가 50cm 인 농어가 있다. 이전에 만든 knr 모델을 통해 예측한 이 농어의 무게는 대략 1kg 이 나왔다. 하지만 실제 예측값은 1.5kg 으로, 모델이 예측한 값과는 차이가 났다. 이유가 뭘까?😋

 

 

💡 K-최근접 이웃 회귀 알고리즘의 문제점

- 훈련 세트의 샘플 범위 밖의 값을 예측하기가 어렵다

➡️ 선형 회귀 알고리즘을 사용해야 한다 !

 

 

💡 선형 회귀 알고리즘

직선의 방정식 찾기

 

- 모델이 데이터로 학습한 값을 저장할 때 보통 _ 을 변수명에 추가한다

  - lr.coef_ : 기울기

  - lr.intercept_ : 절편

 

- 문제점 : 직선을 그릴 때, 무게가 음수가 되는 부분이 생긴다

➡️ 다항 회귀의 필요성

 

 

💡 다항 회귀를 이용하여 모델 재훈련하기

 

➡️ 다항 회귀를 위한 클래스는 따로 존재하지 않기 때문에, column_stack 을 이용하여 직접 구현해주어야 한다

 

- 원래의 특성을 제곱하면서, 다항식 학습 모델을 만든다

 

 

 

 

 

 

🐟 50cm 농어의 무게 예측값이 1574g 으로 보다 정확하게 나왔다 !

 


 

8강. 특성 공학과 규제 알아보기

여러 특성을 조합 → 특성 공학

 

✅ 여러 개의 특성을 이용한 다중 선형 회귀 사용

회귀 분석 종류 설명
단순 선형 회귀 하나의 특성만 사용
다중 선형 회귀 사용하는 특성이 둘 이상
다항 회귀 비선형 데이터

 

 

💡 다중 선형 회귀 모델 구현하기

PolynomialFeatures 변환기 이용

 

- 늘어난 특성의 개수 확인하기 : shape

  - 어떻게 늘어났는지 확인하기 : get_feature_names()

 

 

✅ 특성의 개수를 늘렸을 때

- 훈련 세트의 정확도는 거의 완벽하다

- 반면, 테스트 세트의 정확도는 음수이다 (하나도 맞지 않음)

→ 과대적합

 

➡️ 규제가 필요하다 !

  (규제 전 표준화 필수)

 

 

 

💡 규제로 테스트 세트 정확도 높이기

 

1. L1 규제 : Lasso 모델

 

- L1 규제 : 선형

- 모델 파라미터 : | 가중치 |

- 훈련 세트와 테스트 세트 alpha의 간격이 제일 좁은 곳이 최적

- 일부 특성을 완전히 사용하지 않을 수도 있다

  - 가중치를 0으로 → 특성 사용 X

  - lasso.coef_ → 40

 

 

 

 

2. L2 규제 : Ridge 모델

 

- 모델 파라미터 : (가중치)^2

- alpha 매개변수 기본값 = 1

  - 커질수록 강도가 세진다 (= 규제↑)

  - 작아질수록 강도가 약해진다

  - 어떤 것이 최적인지는 확인해보아야 알 수 있다

 

- alpha 값 찾는 법

  - log scale 로 변경 (10의 배수)

  - 훈련 세트와 테스트 세트의 간격이 가장 좁은 곳이 최적이다

  → alpha = 0.1

 

- 일반적으로 Lasso 회귀보다는 Ridge 회귀가 효과적이다 ^_^