티스토리 뷰

출처: https://spy.com/articles/gear/outdoors/best-fishing-scale-1202745765/

 

 

(한빛미디어에서 모집하는 혼공학습단 활동의 일환으로 혼자 공부하는 머신러닝+딥러닝 책을 공부하고 작성한 글입니다. 책은 제 돈으로 샀습니다. 본문의 코드는 책의 소스코드를 기반으로 하되 글 흐름에 맞게 수정한 것입니다. 원본 코드는 저자 박해선 님의 깃허브에서 보실 수 있습니다. 책에 나오는 넘파이, 판다스 등의 내용은 본 글에는 자세히 넣지 않았습니다. 본 글의 코드는 깃허브에서 보실 수 있습니다.)

 

회귀回歸?

지난 1-2장에서는 길이와 무게로부터 샘플을 분류하는 방법을 배웠습니다. , 주어진 특성feature값으로부터 샘플이 어느 클래스class에 속하는지를 찾아내는 방법이었죠. 그래서 사이킷런의 KNeighborsClassifier를 사용했습니다. 특성은 생선의 길이와 무게였고, 이로부터 생선이 도미인지 빙어인지 구분했습니다.

 

이번 3장에서 알아볼 것은 회귀regression입니다. 간단히 말해 샘플의 특성값으로부터 다른 특성값을 유추하는 방법입니다. 가장 먼저 알아볼 알고리즘의 이름은 k-최근접 이웃 회귀입니다.

 

  • k-최근접 이웃 분류: 비슷한 것들끼리는 비슷한 특성값을 가질 것이다.
    • 예: 도미끼리는 특성값(길이, 무게)이 비슷할 것이다.
    • 분류이므로 결과값은 이산적discrete임
  • k-최근접 이웃 회귀: 비슷한 것들끼리는 특성값의 관계도 비슷할 것이다.
    • 예: 길이가 비슷한 농어들은 무게도 비슷할 것이다.
    • 회귀이므로 결과값은 연속적continuous임 

 

수치해석 등에서 커브 피팅curve fitting(곡선 접합)을 배웠던 분이라면 회귀라는 단어는 들어봤을 겁니다. 저도 왜 커브 피팅이 회귀回歸인지 예전부터 궁금했는데 마땅한 답을 찾지 못했던 기억이 납니다. “노이즈가 섞인 복잡한 데이터를 단순한 차수의 커브로 낮추기 때문에 회귀인가? 아니면 노이즈가 없는 원래의 데이터로 되돌리기 때문에 회귀인가?”라는 생각을 했었습니다만, 이번 기회에 드디어 용어의 기원을 알게 됐네요.

 

회귀란 용어를 보고 어떤 알고리즘인지 예측하기 참 어렵습니다. 이 용어는 19세기 통계학자이자 사회학자인 프랜시스 골턴(Francis Galton)이 처음 사용했습니다. 그는 키가 큰 사람의 아이가 부모보다 더 크지 않는다는 사실을 관찰하고 이를 ‘평균으로 회귀한다’라고 표현했습니다. 그 후 두 변수 사이의 상관관계를 분석하는 방법을 회귀라 불렀습니다.

박해선, 혼자 공부하는 머신러닝 + 딥러닝, 한빛미디어, 115쪽

 

이와 관련된 영상도 있어서 아래에 붙입니다. 지금은 평균으로 회귀한다는 의미는 거의 사라졌다고 하네요.

 

 

k-최근접 이웃 회귀의 동작방식을 농어의 길이와 무게를 이용해서 설명하면 아래와 같습니다.

  • 새로운 길이의 농어가 들어오면 길이가 비슷한 k개의 샘플을 찾는다.
  • 이 샘플들의 무게의 평균값을 새로운 농어의 무게로 예측한다.

 

이게 끝입니다. 간단하죠?

 


 

데이터 준비, 확인, 훈련, 평가, 결정계수

농어perch 56마리의 길이와 무게 데이터가 있습니다. 데이터를 훈련/테스트 세트로 나누고 그래프로 확인해보겠습니다.

 

 

k-최근접 이웃 회귀 알고리즘은 사이킷런의 KNeighborsRegressor 클래스를 이용합니다. KNeighborsClassifier와 마찬가지로 fit() 메서드로 훈련시키고 score()로 평가합니다. 훈련시키기 전에 잠시 할 일이 있습니다. 훈련/테스트 세트의 차원을 맞춰주어야 합니다. 좀 전에 train_test_split으로 56개의 데이터를 42개의 훈련 세트와 14개의 테스트 세트로 나누었습니다. 훈련 세트의 shape(42, )입니다. 이 상태로 fit()에 입력하면 특성값 개수가 42이고 샘플은 1개인 걸로 인식합니다. 사이킷런은 훈련 세트의 샘플이 번째 차원을 따라 놓여있 것으로 받아들이기 때문입니다. 따라서 훈련 세트의 shape(42, 1)로 맞춰주어야 합니다. 정확히는 (n_samples, n_features)shape을 갖는 훈련 세트가 입력되어야 합니다. 관련 내용은 공식 문서에서 볼 수 있습니다.

 

 

knr k-최근접 이웃 회귀를 담당하는 매니저입니다. 매니저에겐 뭐든 시킬 수 있습니다. knr.score()가 반환하는 값은 회귀 알고리즘의 결정계수coefficient of determination입니다. $R^2$라고도 부르며 계산식은 아래와 같습니다.

 

$ R^2 = 1 - {{\Sigma(타겟-예측)^2} \over {\Sigma(타겟-타겟평균)^2}} $

 

식을 보면 알 수 있듯이 예측이 타겟과 일치하면 $R^2$1이 됩니다. $R^2$1에 가까울수록 좋은 모델입니다. , 훈련/테스트 세트 중 하나만 1에 가까우면 안됩니다. 이 부분은 잠시 뒤에 살펴보겠습니다. 방금 만든 모델은 점수가 100점 만점에 99.3점 정도 되네요. 예측이 타겟과 큰 차이를 보이면 결정계수는 음수가 될 수도 있습니다.

 

이왕 하는 김에 $R^2$를 직접 계산해서 똑같이 나오는지 확인해보겠습니다.

 

 

이럴 때 정말 짜릿합니다. 이 기분에 코딩하는 거 아니겠습니까? 뿌듯-

 

이쯤에서 한 가지 궁금한 게 생깁니다. 훈련 세트로 훈련시킨 모델을 훈련 세트로 평가하면 $R^2$1이 나올까요?

 

 

안 나오네요? 이유가 있습니다. KNeighborsRegressor KNeighborsClassifier와 마찬가지로 새로운 데이터가 들어왔을 때 가까운 데이터 몇 개를 확인할지 정할 수 있습니다. 기본값은 5입니다. 따라서 훈련 세트에 있던 샘플을 그대로 집어넣어도, 본인 외에 가까운 4개를 포함한 평균을 계산합니다. 원래의 타겟과는 달라질 수밖에 없습니다.

 

그럼 혹시 가까운 5개가 아니라 딱 1개만 이용하라고 하면 $R^2$1이 나올까요?

 

 

어라? 이것도 1이 안 나오네요. 여기에도 이유가 있습니다. 현재 train_input을 보면 길이 22짜리 농어가 5마리 있습니다. 5마리의 무게는 [135, 120, 130, 110, 120]입니다. 그래프를 그려보면 x22 5개의 점이 겹쳐있겠죠. 이 모델에 길이 22인 새로운 농어 5마리가 들어오면 무게를 얼마로 예측해야 할까요? 각 농어에 무게 135, 120, 130, 110, 120를 분배할 근거가 없습니다. 실제로 확인해보니 135로 예측하네요. 모델의 k 값을 2로 했더니 [135, 120]의 평균으로, 3으로 했더니 [135, 120, 130]의 평균으로 예측하는 걸 보니 앞에서부터 k개만큼 사용하는 것 같네요.

 

 

모델의 k 값을 다시 5로 세팅하고 길이 22짜리 농어의 무게를 예측하면, 길이 225마리의 무게 [135, 120, 130, 110, 120]의 평균값인 123을 반환합니다.

 

 

성격은 다르지만 문제가 하나 더 있습니다. 데이터 그래프의 왼쪽 끝을 보면 유독 짧고 가벼운 샘플이 있습니다.

 

 

테스트 세트 중 0번째 샘플로 길이 8.4, 무게 5.9짜리 농어입니다. 혼자 따로 떨어져 있으므로 가까운 5개의 샘플이라고 해도 새로운 농어를 대표해주지 못합니다.

 

 

확인해보니 가까운 5마리의 무게는 [32, 40, 70, 78, 80]이네요. 이 값들의 평균인 60이 길이 8.4짜리 농어의 예측 무게가 됩니다. 실제 무게인 5.9와는 큰 차이를 보이는군요. 이 이슈는 잠시 뒤에 더 자세히 살펴보겠습니다.

 


 

과대적합, 과소적합

앞서 훈련시킨 회귀 모델의 훈련/테스트 세트에 대한 평가 결과는 아래와 같습니다.

 

 

훈련시킨 훈련 세트보다 테스트 세트 점수가 조금 더 높네요. 이처럼 테스트 세트 점수가 훈련 세트보다 높거나, 두 점수 모두 낮은 경우 모델이 과소적합underfitting되었다고 말합니다. 반대로 훈련 세트 점수는 높은데 테스트 세트 점수가 낮으면 과대적합overfitting되었다고 말합니다. 과대적합은 이름 그대로 훈련 세트에만 잘 동작하도록 과하게 적합되었다는 뜻입니다.

 

훈련 세트와 테스트 세트의 점수를 비교했을 때 훈련 세트가 너무 높으면 과대적합, 그 반대이거나 두 점수가 모두 낮으면 과소적합입니다.

박해선, 혼자 공부하는 머신러닝 + 딥러닝, 한빛미디어, 122쪽

 

k-최근접 이웃 회귀에서 과소적합을 해결할 간단한 방법이 있습니다. KNeighborsRegressorn_neighbors 기본값은 5입니다. 이 값을 낮추면 됩니다. 모든 데이터에는 값의 변동fluctuation이 있습니다. 이 변동을 데이터의 특성으로 보고 변동에 맞추면 점수가 높아집니다. 이 변동에 맞추는 방법이 바로 k 값을 낮추는 겁니다. 5에서 3으로 줄여보겠습니다.

 

 

두 값의 수준이 비슷해졌고, 훈련 세트가 약간 더 높은 점수를 얻었습니다. 이렇게 과소적합을 해결할 수 있습니다. k-최근접 이웃 분류에서는 k가 홀수여야 합니다. 짝수일 경우 동점이 나올 수 있기 때문입니다. k-최근접 이웃 회귀에서는 k 짝수여도 됩니다.

 


 

k-최근접 이웃 회귀의 한계

앞에서 다뤘던 k-최근접 이웃 회귀는 비슷한 것들끼리는 특성값의 관계도 비슷할 것이라는 가정을 기반으로 한 방법입니다. 길이가 비슷한 농어들은 무게도 비슷할 것이라는, 충분히 타당한 믿음이죠. 그런데 만약 길이가 비슷한 농어가 없으면 어떻게 될까요? 준비된 농어 데이터는 길이가 최대 44cm입니다. 여기에 길이 100cm짜리 농어가 들어오면 어쩌죠? 준비된 데이터 중 100cm와 비슷한 길이는 없습니다. k-최근접 이웃 회귀는 가까운 데이터를 참고하는 수밖에 없는데, 이 방법으로는 당연히 큰 오차를 보이겠죠.

 

 

길이 50cm 100cm짜리 농어를 넣어봤는데, 가까운 3개의 점을 똑같이 골라냈습니다. 이 방식으로는 훈련 세트의 범위를 벗어나는 입력에 대해서는 제대로 된 예측을 할 수 없습니다. 앞에서 봤던 유독 짧은 농어에 대해서도 동일한 문제가 생겼었죠. 새로운 방법이 출동해야겠군요. 새로운 방법의 이름은,

 


 

선형 회귀

선형 회귀는 데이터 전체를 잘 표현할 수 있는 하나의 수식을 찾아내는 것을 말합니다. 수치해석의 최소자승법을 이용한 커브 피팅을 생각하면 됩니다. 일반적으로 수식은 다항식의 형태를 가집니다. 원래의 데이터가 다항식이 아닐 때는 어떻게 할까요? 다항식의 형태가 되도록 수식을 고치면 됩니다. 간단한 몇 가지 기법은 아래 영상에서 보실 수 있습니다.

 

 

고차항이 있을텐데 왜 선형 회귀일까요? 고차항을 새로운 특성처럼 다루면 모든 특성에 대한 선형 식이 됩니다. 다중 회귀multiple regression와 비슷한 개념인데, 조금 뒤에 살펴보겠습니다.

 

  • k-최근접 이웃 분류: 비슷한 것들끼리는 비슷한 특성값을 가질 것이다.
    • 예: 도미끼리는 특성값(길이, 무게)이 비슷할 것이다.
    • 분류이므로 결과값은 이산적discrete임

 

  • k-최근접 이웃 회귀: 비슷한 것들끼리는 특성값의 관계도 비슷할 것이다.
    • 예: 길이가 비슷한 농어들은 무게도 비슷할 것이다.
    • 회귀이므로 결과값은 연속적continuous임

 

  • 선형 회귀: 데이터 전체를 잘 표현할 수 있는 하나의 수식을 찾을 수 있을 것이다.
    • 예: 농어의 무게는 길이의 3차 다항식으로 표현 가능할 것이다.

 

선형 회귀는 사이킷런의 LinearRegression 클래스를 사용합니다. 사용 방법은 앞에 나왔던 다른 클래스들과 비슷하나, 중요하게 다른 점이 있습니다. 다항식의 형태로 모델을 만들 것이므로, 다항식을 구성하는 각 차수의 데이터를 준비해줘야 합니다. 조금 전에 고차항을 새로운 특성처럼 다루기 때문에 선형 회귀라고 부를 수 있다고 했었죠? 농어의 무게를 길이의 2차식으로 모델링하겠다면 모델에 들어갈 입력의 각 행은 [길이**2, 길이]의 형태를 가져야 합니다. 사람은 0번째가 길이의 제곱, 1번째가 길이임을 알고 있습니다. 하지만 모델은 서로 다른 2개의 특성이 있는 것처럼 인식합니다. 이제 모델이 할 일은 타겟과의 차이가 최소가 되도록 각 특성에 곱할 계수를 찾는 것입니다. 책에서는 1, 2차까지만 이용했는데, 저는 3차까지 해보겠습니다. 부피는 길이의 세제곱에 비례하니까요.

 

 

… 3차가 제일 잘 맞을 것이라는 저의 예상이 틀렸군요. 2차 회귀 모델의 성능이 제일 좋게 나왔습니다. 시무룩… LinearRegression 모델을 훈련시키면 각 특성(차수)에 곱할 계수는 coef_, 절편은 intercept_에 들어가 있습니다. 그래프로도 확인해보겠습니다.

 

 

이렇게 보면 2차와 3차 중 어느 것이 잘 맞는지 잘 모르겠네요. 어쨌든 score()의 결과는 2차가 더 좋습니다.

 


 

넘파이의 polyfit

넘파이에도 최소자승법으로 커브 피팅을 하는 함수가 있습니다. numpy.polyfit()입니다. 자세한 사용법은 공식 문서를 확인해주세요.

 

 

오호! 결과가 LinearRegression과 동일하게 나왔군요. 입맛에 따라 골라 드시면 되겠습니다.

 


 

높이와 두께도 이용할 수 있을까?

주어진 데이터는 농어의 길이 외에도 높이와 두께가 있었습니다. 이것들도 같이 사용할 수 있지 않을까요? , 맞습니다. 다변수 선형 회귀입니다. 책에서는 다중 회귀라고 부르고 있네요. 2변수 이상의 함수이므로 이제 시각화하기는 쉽지 않습니다. 3변수부터는 개념적으로 상상하는 수밖에 없습니다. 일반적인 N차원을 상상하는 것이 바로 선형대수의 시작(이라고 저는 주장하는 중)입니다.

 

이런 식으로 기존의 특성을 조합해서 새로운 특성을 만드는 것을 특성 공학feature engineering이라고 부릅니다...만, 마음에 들지 않는 용어입니다. 오역이라고 생각하거든요. 여기서 engineering은 공학이라기보단 조작이라고 봐야 더 맞거든요. 영단어 engineer는 조작하다는 뜻의 동사로도 쓰입니다. 여튼,

 

데이터를 준비하고 훈련/테스트 세트를 나눕니다. 매번 값을 적기 번거로우니 이제 판다스로 읽어옵니다.

 

 

고차 선형 회귀와 마찬가지로 이번에도 다항식을 구성하는 각 차수를 만들어야 합니다. 게다가 이번에는 2변수 이상입니다. 하나하나 만들려고 하니 번거롭군요. 사이킷런은 다 계획이 있습니다. PolynomialFeatures를 이용하면 됩니다. PolynomialFeatures.transform() 메서드를 이용하면, n개의 변수로 만들 수 있는 모든 단항식을 알아서 계산해줍니다.

 

 

위 예시는 샘플이 [2, 3] 하나인 경우, 23으로 만들 수 있는 모든 단항식의 값을 transform()이 반환한 결과입니다. get_feature_names_out()을 이용하면 아예 수식의 형태로 볼 수도 있습니다. 아참, 상수항은 없습니다. 사이킷런 모델은 상수항을 알아서 만들어주므로 PolynomialFeaturesinclude_biasFalse로 입력했습니다.

 

여기서 잠깐 수학퀴즈입니다. n변수 k차 회귀를 한다면 transform()으로 만들어지는 배열의 열은 몇 개일까요? n개의 변수로 만들 수 있는 최고 k차 단항식의 개수는, n+1개의 변수 중 중복하여 k개를 고르는 것과 같습니다. 중복조합이죠. n이 아니라 n+1인 이유는 상수항 때문입니다. 따라서 transform()의 반환 배열의 열 개수는 $_{n+1} H_k$가 됩니다. 궁금하신 분들은 한번 확인해보세요. 제가 틀렸으면 커피 한잔 사드립니다. (진담임)

 

모든 단항식의 값을 계산했다면 이후에 할 일은 선형 회귀와 똑같습니다. 각 열에 적절한 계수를 곱하여 타겟과의 오차가 최소가 되도록 만들면 됩니다.

 

 

훈련 세트 점수가 올라갔습니다. 테스트 세트 점수가 살짝 낮아진 게 좀 걸리긴 하지만, 어쨌든 과소적합 문제는 해결됐습니다. PolynomialFeatures는 기본적으로 2차까지 계산합니다. 한번 차수를 확 올려보겠습니다.

 

 

으악! 훈련 세트 점수는 기가 막힌데 테스트 세트는 엉망이다 못해 음수로 곤두박질 쳤군요. 전형적인 과대적합입니다. 차수를 높이면 훈련 세트는 점수가 높아질 수밖에 없습니다.

 

출처: https://iamvaibhavsaini.medium.com/what-is-regularization-and-why-regularization-reduces-overfitting-e938282c32a8

 

앞에서도 언급했듯이 모든 데이터에는 로컬한 변동이 있습니다. 많은 경우 이런 변동은 데이터 특성이라기보단 노이즈일 때가 많습니다. 위 그림을 보면 가운데의 부드러운 곡선이 데이터를 가장 잘 표현한다고 봐야겠죠. 곡선과 실제 데이터의 차이는 노이즈임을 우리는 경험적으로 알고 있기 때문입니다. 예를 들어 길이, 높이, 두께가 같은 농어 100마리의 무게가 한치의 오차도 없이 같지는 않을 겁니다. 실제 무게가 다를 수도 있지만, 측정 오차가 포함될 수도 있습니다. 모델의 차수를 높이는 것은 이런 변동을 노이즈가 아니라 데이터의 특성으로 보고 모두 학습시키겠다는 것과 같습니다. 그 결과 위 그림의 오른쪽과 같은 그래프가 나옵니다. 쉽게 말해 훈련 세트에 억지로 맞춘 것이므로 당연히 훈련 세트의 점수는 높아집니다. 하지만 원래 데이터가 진짜 저렇게 복잡한 모양일 가능성은 낮겠죠. 또한 차수가 높으므로 입력값의 차이에 민감하게 반응하게 됩니다. 그래서 테스트 세트의 점수는 낮아질 가능성이 높습니다. 잘 이해가 되지 않는다면 아래 영상의 8분 23초부터 보시기 바랍니다. 9차로 피팅하면 모든 점을 정확히 찾았지만 변동이 엄청나게 심한 모델이 만들어집니다.

 

 

그럼 차수도 높이면서 과대적합도 일어나지 않게 하는 방법이 있을까요?

 


 

규제

이름 그대로 규제regularization입니다. 과도한 학습이 일어나지 않도록 계수를 제한하겠다는 뜻입니다.

 

규제regularization는 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 것을 말합니다. 즉 모델이 훈련 세트에 과대적합되지 않도록 만드는 것이죠. 선형 회귀 모델의 경우 특성에 곱해지는 계수(또는 기울기)의 크기를 작게 만든 일입니다.

박해선, 혼자 공부하는 머신러닝 + 딥러닝, 한빛미디어, 158쪽

 

규제를 하기 전에 먼저 손볼 것이 있습니다. 회귀로 계산하는 계수는 특성값의 스케일에도 영향을 받을 것입니다. 차수가 높아질수록 민감도가 더 높아지겠죠. 그래서 2장에서 다룬 표준점수를 여기에도 똑같이 도입해야 합니다. 사이킷런은 이것마저 준비해두었네요. StandardScaler 클래스입니다.

 

 

이제 회귀 클래스의 입력으로 train_scaledtest_scaled를 넣으면 됩니다.

 

규제에는 2가지 방법이 있습니다. 릿지ridge와 라쏘lasso입니다.

 


 

릿지 회귀

릿지 회귀는 sklearn.linear_model.Ridge 클래스를 사용합니다. 릿지 회귀는 계수의 제곱의 합을 제한합니다. 계수의 L2 norm을 제한한다고 말할 수도 있습니다. 좀 더 정확히는 아래 함수를 최소화하는 계수 $w$를 찾습니다. 자세한 내용은 공식 문서에서 보실 수 있습니다.

 

$ ||y - Xw||^2_2 + \alpha||w||^2_2$

 

위 식에서 $\alpha$는 규제의 강도입니다. $\alpha$가 클수록 규제 강도가 세지고 계수 값이 더 많이 제한됩니다. $\alpha$0이면 계수를 전혀 제한하지 않으므로 선형 회귀와 동일한 결과가 나옵니다. $\alpha$의 기본값은 1입니다. 아래는 릿지 회귀 코드입니다.

 

 

5차면 꽤 높은 차수입니다. 그런데도 안정적인 점수가 나오는군요. 결과가 마음에 듭니다.

 

릿지 회귀에서 $\alpha$ 값은 모델이 학습할 수 없는 값입니다. 따라서 사람이 직접 지정해주어야 합니다. 이런 값을 하이퍼파라미터hyperparameter라고 부릅니다.

 

이렇게 머신러닝 모델이 학습할 수 없고 사람이 알려줘야 하는 파라미터를 하이퍼파라미터(hyperparameter)라고 부릅니다.

박해선, 혼자 공부하는 머신러닝 + 딥러닝, 한빛미디어, 161쪽

 

그렇다면 $\alpha$는 어느 정도가 적절할까요? 모델이 알려주지 못한다면 우리가 직접 나서야죠. 아래는 $\alpha$0.001에서 100까지 10배씩 늘려가며 학습한 결과입니다.

 

 

alpha0.1일 때가 제일 안정적인 것 같네요. 이 값으로 훈련시키고 결과를 따로 보겠습니다.

 

 

두 점수가 모두 높게 나왔군요! 과소적합 문제도 없어졌습니다. 무려 5차 회귀 모델임을 기억하세요.

 


 

라쏘 회귀

라쏘 회귀는 릿지 회귀와 달리 계수의 절대값의 합을 제한합니다. 계수의 L1 norm을 제한한다고 말할 수도 있겠네요. 공식 문서를 보니 아래 값이 최소가 되는 계수를 찾는다고 하네요.

 

$ (1 / (2 n_{samples}))||y - Xw||^2_2 + \alpha||w||_1$

 

여기서도 마찬가지로 $\alpha$는 규제의 강도입니다.

 

라쏘 회귀는 sklearn.linear_model.Lasso 클래스를 사용합니다. 아래는 라쏘 회귀 코드입니다.

 

 

여기서도 $\alpha$는 하이퍼파라미터입니다. 릿지와 같은 방법으로 적절한 $\alpha$ 값을 찾아보겠습니다.

 

 

alpha10일 때가 가장 마음에 드네요. 이 값으로 라쏘 회귀를 해보겠습니다.

 

 

마찬가지로 안정적인 값이 나오는군요.

 

릿지와 라쏘 회귀에 대한 좀 더 이론적인 내용은 아래 영상에서 보실 수 있습니다.

 

 


 

기본 미션: 03-1 확인 문제 2

k-최근접 이웃 회귀에서 k값을 1, 5, 10으로 바꿔가며 모델의 성능을 확인하는 문제입니다. 코드와 결과는 아래와 같습니다.

 

 

 

k값이 작을수록 로컬한 변동을 따라가고, k값이 커질수록 평균적인 트렌드만 따라가는 것을 볼 수 있습니다. 왼쪽 끝은 가까운 샘플이 모두 동일해서 예측값도 일정하게 나오는 걸 볼 수 있네요.

 

선택 미션: 모델 파라미터에 대해 설명하기

모델 파라미터model parameter란 머신러닝 알고리즘이 찾는 값을 말합니다. 회귀 분석의 결과인 계수와 절편이 모델 파라미터에 해당됩니다. 머신러닝 알고리즘의 훈련 과정은 최적의 모델 파라미터를 찾는 것으로 볼 수 있습니다. 반대로 하이퍼파라미터hyperparameter는 머신러닝 알고리즘이 찾을 수 없는 값을 말합니다. 규제의 강도인 alpha가 하이퍼파라미터입니다. 이런 값들은 사람이 직접 찾아야 합니다.

 


 

3장 내용정리는 여기서 마치겠습니다. 끝까지 읽어주셔서 고맙습니다.

 


 

더 읽기

얼마 전 제임스 웹 우주 망원경 발표를 봤는데, 여기에도 회귀 분석이 사용된 걸 보았습니다. 자세한 내용은 여기를 확인해보세요.

 

댓글