[혼자 공부하는 머신러닝+딥러닝] 6강. 회귀 문제를 이해하고 k-최근접 이웃 알고리즘으로 풀어 보기 - reshape, 과대적합, 과소적합
https://www.youtube.com/watch?v=0mrLRkgbjA0&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=7
- 지도학습은 분류와 회귀로 분류된다.
- 분류는 특정 이미지나 조건이 원하는 결과값과 일치하는가를 판별한다.
- 가지고 있는 데이터에 독립변수와 종속변수가 있고, 종속변수가 이름일 때 분류를 이용한다.
- 예) x-ray 사진과 영상 속 종양의 크기, 두께 -> 악성종양 여부를 판별한다
- 예) 품종, 당도, 산도, 지역, 연도 -> 와인의 등급을 판별한다.
- 예) 키, 몸무게, 시력, 지병 -> 현역, 공익, 면제를 판별한다.
- 회귀는 우리가 예측하고 싶은 결과가 숫자일 경우 사용한다.
- 가지고 있는 데이터에 독립변수와 종속변수가 있고, 종속변수가 숫자일 때 회귀를 이용한다.
- 예) 온도 -> 온도에 따른 레모네이드 판매량을 판별한다.
- 예) 역세권, 조망 등 -> 해당 지역의 집 값을 판별한다.
- 예) 자동차 속도 -> 충돌 시 사망확률을 판별한다.
- 예) 나이 -> 나이에 따른 키를 판별한다.
- reference :
https://opentutorials.org/module/4916/28942
- k-최근접 이웃 분류와 회귀
- k-최근접 이웃 분류 : 가장 가까운 이웃이 어떤 모양인지 판별하여 가장 인접한 이웃들을 기준으로 입력값을 판별함
- k-최근접 이웃 회귀 : 가장 가까운 이웃의 값이 100, 60, 80인 경우 입력값은 (100+80+60)/3 = 80이 된다.
- sklearn.model_selection의 train_test_split :
- train_input, train_target, test_input, test_target을 자동으로 만들어 준다.
- 1차원 배열를 넣으면 1차원 배열을 리턴하고 2차원 배열을 넣으면 2차원 배열을 리턴한다.
- reshape는 1차원 배열을 원하는 차원으로 바꿔준다.
- 예) [1,2,3,4,5,6]의 배열을 reshape(2,3) 으로 호출하면 [[1,2,3],[4,5,6]]으로 만들어 준다. 입력 값은 행과 열이다.
- reshape(-1,1), reshape(1,-1)에 대한 정리
- reshape(-1, 정수)의 행(row) 위치에 -1를 정의하는 경우
x.reshape(-1, 1) => shape(12,1) |
x.reshape(-1, 2) => shape(6, 2) |
x.reshape(-1, 3) => shape(4, 3) |
x.reshape(-1, 4) => shape(3, 4) |
x.reshape(-1, 4) => shape(3, 4)In [5]: x.reshape(-1, 1) Out[5]: array([[ 0], [ 1], [ 2], [ 3], [ 4], [ 5], [ 6], [ 7], [ 8], [ 9], [10], [11]]) |
In [6]: x.reshape(-1, 2) Out[6]: array([[ 0, 1], [ 2, 3], [ 4, 5], [ 6, 7], [ 8, 9], [10, 11]]) |
In [7]: x.reshape(-1, 3) Out[7]: array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]) |
In [8]: x.reshape(-1, 4) Out[8]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) |
- reshape(정수, -1)의 열(column) 위치에 -1를 정의하는 경우
x.reshape(1, -1) => shape(1, 12) |
In [9]: x.reshape(1, -1) Out[9]: array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]) |
x.reshape(2, -1) => shape(2, 6) |
In [10]: x.reshape(2, -1) Out[10]: array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]]) |
x.reshape(3, -1) => shape(3, 4) |
In [11]: x.reshape(3, -1) Out[11]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) |
x.reshape(4, -1) => shape(4, 3) |
In [12]: x.reshape(4, -1) Out[12]: array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]) |
- reference :
https://rfriend.tistory.com/345
- train_test_split 이후 1차원 배열을 2차원으로 만드는 이유는 fit에 배열을 입력할 수 있는 조건을 맞추기 위해서이다.
- 회귀에서 R^2(알스퀘어 : 결정 계수)가 출력된다.
- R^2 = 1 - ((타깃 - 예측)^2의 합 / (타깃 - 평균)^2의 합)
- 분자
- 타깃은 test_target
- 예측은 test_input으로 예측한 값
- 타깃 - 예측 값을 샘플마다 다 실행하고 제곱하여 모두 더한다
- 분모
- 타깃은 test_target
- 평균은 test_target의 평균값
- 타깃 - 평균 값을 샘플마다 다 실행하고 제곱하여 모두 더한다
- 이 식이 의미하는 것은 다음과 같다.
- 만약 예측이 타깃의 평균 정도라면 분자랑 분모가 같아 질것이다. 이는 나눈 값이 1이 된다. 그렇게 되면 R스퀘어는 0이 된다 이는 좋지 않은 모델이라는 의미이다.
- 만약 예측이 타깃을 정확히 맞춘다면 분자는 0이 된다. 나눈 값은 0이 되고 R스퀘어는 1이 된다. 이는 좋은 모델이라는 의미이다.
- R스퀘어는 0~1사이의 결과 값으로 판별된다.
- 모델에서는 R스퀘어 외 다른 지표를 사용하여 모델의 성능을 판단할 수 있다.
- 회귀모델에서는 평균 절대값 오차 (mean_absolute_error), 평균 제곱근 오차(mean_square_error)가 있다.
- 이러한 모델들은 sklearn.metrics에 많이 있다.
- 과대적합 (overfitting)과 과소적합(underfitting)
- 과대적합(overfitting)이란 머신러닝 모델을 학습할 때 학습 데이터셋에 지나치게 최적화하여 일반성이 떨어지는 현상이다.
- 훈련 세트 내 데이터에 대해서는 높은 정확도를 보여주지만 외의 데이터에 대해서는 낮은 정확도를 보인다.
- 기존 데이터의 규칙에 과하게 적응하여 새로운 데이터의 규칙을 잘 예측하지 못하는 것이다.
- 발생 원인 :
- 데이터 세트 내 데이터가 충분하지 못한 경우
- 데이터 세트 내 분산이 크거나 노이즈가 심한 경우
- 모델의 복잡도가 큰 경우
- 과도하게 큰 epoch로 학습하는 경우
- 해결 방법 :
- 가장 주된 원인은 데이터 세트가 충분히 크지 않은 경우이며 이런 경우 훈련 세트에 데이터를 추가하여 과대 적합을 줄일 수 있다.
- 더 이상의 데이터 확보가 어려울 경우 가중치를 제한하는 규제(Regularization)를 적용하여 모델의 복잡도를 낮추어 과대 적합을 완화하는 방법도 있다.
- 데이터 세트 내 데이터의 분산이 크거나 노이즈가 심한 경우 데이터를 전처리(preprocessing)하여 훈련에 적합한 데이터 세트로 바꿔줄 수 있다.
- 또한 모델의 학습 곡선(learning curve)을 보고 적당한 epoch를 찾아내어 그 epoch까지만 훈련을 하도록 하는 방법도 존재한다. 이를 조기종료(early-stopping)라 한다.
- 과소적합(underfitting)이란 최적화가 제대로 수행되지 않아 모델이 훈련 세트의 규칙을 제대로 찾지 못해 모델의 성능이 맞게 나오는 현상이다.
- 이는 훈련 세트에 대한 손실값과 검증 세트에 대한 손실 값이 모두 크게 나타난다. 즉 훈련 세트에 대한 정확도와 검증 세트에 대한 정확도가 모두 낮은 경우가 된다.
- 훈련 결과의 score보다 테스트 결과의 score가 더 높게 나오는 경우 (일반적인 경우 훈련 결과의 score가 높다)
- 발생 원인 :
- 모델의 복잡도가 낮은 경우
- 모델에 너무 많은 규제가 적용된 경우
- 충분하지 못한 epoch로 학습하는 경우
- 해결 방법 :
- 모델의 복잡도가 낮은 경우 조금 더 복잡한 모델을 적용하여 훈련 세트의 규칙을 잘 찾도록 만든다.
- 모델에 너무 많은 규제가 걸린지 확인한다.
- 더 많은 epoch를 통해 모델이 충분히 학습을 하여 훈련 세트의 규칙을 찾을 수 있도록 만든다.
- k-최대인접 모델에서 이웃 탐지 수를 극단적으로 낮추면 과대적합이 되고 극단적으로 높이면 과소적합이 된다.
- 그래프를 만들면, 과대적합의 경우 바로 이웃된 값에 영향을 받기에 매우 들쭉날쭉한 그래프를 만든다
- 과소적합의 경우 전체 값에 영향을 받게되어 딱 하나의 값만 예측하게 된다.
- reference :
https://speedanddirection.tistory.com/72
https://yhyun225.tistory.com/17
https://justweon-dev.tistory.com/19
https://bruders.tistory.com/80
'데이터분석-머신러닝-AI > 강의 정리' 카테고리의 다른 글
[혼자 공부하는 머신러닝+딥러닝] 8강. 특성 공학과 규제 알아보기 - 다중회귀 (1) | 2023.10.25 |
---|---|
[혼자 공부하는 머신러닝+딥러닝] 7강. 사이킷런으로 선형 회귀 모델 만들어 보기 - 선형 회귀, 다항회귀 (0) | 2023.10.24 |
[혼자 공부하는 머신러닝+딥러닝] 5강. 정교한 결과 도출을 위한 데이터 전처리 알아보기 - 표준화 정리 (0) | 2023.10.20 |
[혼자 공부하는 머신러닝+딥러닝] 4강. 훈련 세트와 테스트 세트로 나누어 사용하기 - 훈련 세트와 테스트 세트 분할하는 방법 (0) | 2023.10.17 |
[혼자 공부하는 머신러닝+딥러닝] 3강. 마켓과 머신러닝 - KNeighborsClassifier 최근접 이웃 (KNN) 알고리즘 (0) | 2023.10.17 |
댓글