데이터분석-머신러닝-AI/강의 정리

[혼자 공부하는 머신러닝+딥러닝] 6강. 회귀 문제를 이해하고 k-최근접 이웃 알고리즘으로 풀어 보기 - reshape, 과대적합, 과소적합

bluebamus 2023. 10. 24.

https://www.youtube.com/watch?v=0mrLRkgbjA0&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=7

- 지도학습은 분류와 회귀로 분류된다.

   - 분류는 특정 이미지나 조건이 원하는 결과값과 일치하는가를 판별한다.

   - 가지고 있는 데이터에 독립변수와 종속변수가 있고, 종속변수가 이름일 때 분류를 이용한다.

      - 예) x-ray 사진과 영상 속 종양의 크기, 두께 -> 악성종양 여부를 판별한다

      - 예) 품종, 당도, 산도, 지역, 연도 -> 와인의 등급을 판별한다.

      - 예) 키, 몸무게, 시력, 지병 -> 현역, 공익, 면제를 판별한다.

 

   - 회귀는 우리가 예측하고 싶은 결과가 숫자일 경우 사용한다.

   - 가지고 있는 데이터에 독립변수와 종속변수가 있고, 종속변수가 숫자일 때 회귀를 이용한다.

      - 예) 온도 -> 온도에 따른 레모네이드 판매량을 판별한다.

      - 예) 역세권, 조망 등 -> 해당 지역의 집 값을 판별한다.

      - 예) 자동차 속도 -> 충돌 시 사망확률을 판별한다.

      - 예) 나이 -> 나이에 따른 키를 판별한다.

 

 - reference : 

https://opentutorials.org/module/4916/28942

 

회귀 VS 분류 - Machine learning 1

지도학습은 크게 ‘회귀’와 ‘분류’로 나뉩니다. 회귀는 영어로 Regression이고, 분류는 Classification입니다. 와!! 말이 정말 어렵죠. 걱정 마세요. 알고 보면 하나도 안 어렵습니다. 그전에 아래 그

opentutorials.org

 

 - 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

 

[Python NumPy] reshape에서 -1 은 무슨 의미인가? (reshape(-1, 1))

파이썬 NumPy 에서 배열의 차원(Dimension)을 재구조화, 변경하고자 할 때 reshape() 메소드를 사용합니다. 가령, 3개의 행과 4개의 열로 구성된 2차원의 배열로 재설정하고 싶으면 reshape(3, 4) 처럼 reshape(

rfriend.tistory.com

 

 - 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

 

혼자 공부하는 머신러닝+딥러닝(ch.3-1 k-최근접 이웃 회귀)

chapter.3 회귀 알고리즘과 모델 규제¶ 03-1 k-최근접 이웃 회귀¶ - k-최근접 이웃 회귀¶ 지도 학습 알고리즘은 크게 분류와 회귀로 나뉜다. 분류는 앞서 배웠지만 샘플을 몇 개의 클래스 중 하나로

speedanddirection.tistory.com

https://yhyun225.tistory.com/17

 

데이터 세트 (2) - 과대 적합(over fitting)과 과소 적합(under fitting)

머신러닝에서 과대 적합과 과소 적합은 모델의 성능을 낮추는 주된 원인입니다. 1 ) 과대 적합(over fitting) 과대 적합(over fitting)이란 모델이 훈련 세트에 과하게 적합한 상태가 되어 일반성이 떨어

yhyun225.tistory.com

https://justweon-dev.tistory.com/19

 

[머신 러닝] 과소적합(underfitting), 과대적합(overfitting)

편향과 분산 직선 모델은 너무 간단해서 복잡한 곡선 관계를 학습하지 못한다는 한계가 있습니다. 모델이 너무 간단해서 데이터의 관계를 잘 학습하지 못하는 경우 그 모델은 편향이 높다 라고

justweon-dev.tistory.com

https://bruders.tistory.com/80

 

과대적합(Overfitting)과 과소적합(Underfitting)

과소적합(Underfitting) 모델이 너무 단순해서(충분히 복잡하지가 않아서) 데이터의 내재된 구조/패턴을 학습하지 못할 때 발생한다. 머신에게 공을 학습시켜야 한다고 가정해보자. 먼저 축구공, 야

bruders.tistory.com

 

댓글