갓생 살고 싶은 대학생 블로그
article thumbnail
혼공머신 (머신러닝+딥러닝) 2주차 미션

미션은 3-1 연습문제이지만 3-1 내용을 복습 겸 정리해보겠다

오늘은 새로운 데이터인 농어 데이터를 사용한다

 

농어 데이터

넘파이 불러와주고 농어 길이랑 무게 데이터를 가져와준다

데이터 불러왔으면 해야 하는 것은? 

matplotlib 가져와주고 산점도 그래프 그리기

 

사이킷런의 train_test_split 함수를 통해 훈련 세트와 테스트 세트를 나눠준다

perch_length와 perch_weight, 총 2개의 배열을 넣었기 때문에 각 2개씩 나뉘어 총 4개의 배열이 반환된다

random_state는 랜덤시드인데 42로 지정했다

 

reshape() 메서드를 통해 train_input과 test_input을 2차원 배열로 바꿔준다

사이킷런은 2차원 배열로 데이터가 들어오길 기대하기 때문이다

여기서는 인풋 데이터가 1차원이어서 결과값도 1차원으로 나오게 된다

reshape(-1,1) = 열이 하나이고 행방향으로 남은 차원을 다 사용하겠다는 뜻

reshape 메서드에서 크기에 -1을 지정하면 나머지 원소 개수로 모두 채우라는 의미이다

따라서 (42,) 크기이던 값이 (42,1)로 나오게 된다

 

R-squared

KNeighborsRegressor()를 불러와 객체를 생성해준다

KNeighborsRegressor는 k-최근접 이웃 회귀 알고리즘이다

이후 fit()메서드를 통해 모델을 훈련시켰다

 

테스트 세트의 점수를 확인해보면 약 0.9928의 값이 나온다 

Classifier에서 이 점수는 테스트 세트의 샘플을 정확하게 분류한 개수의 비율이었다

Regressor에서는 결정계수 (R-squared)라고 부른다 

R-sqaured의 수식은 다음과 같다

 

결정계수는 각 샘플의 타깃과 예측값의 차이를 제곱하여 더하고 타깃과 타깃 평균의 차이를 제곱하여 더한 값으로 나눠준 값이다

예측이 타깃 값에 매우 가까운 값으로 나오면 R-squared는 1에 가까운 값이 된다

= 결정계수는 1에 가까울수록 좋음

 

MAE

mean_absolute_error는 타깃과 예측값의 절댓값 오차를 평균하여 반환한다

mean_absolute_error()의 첫번째 매개변수는 타깃, 두번째 매개변수는 예측값을 전달한다

타깃-예측을 제곱한 다음 전체 샘플에 대해 평균한 값을 반환한다

 

예제에서는 19.157 정도의 수치가 나왔다

이는 예측값이 평균적으로 19정도 타깃값과 다름을 보여준다

 

R-squared

 

모델을 훈련시킨 뒤 결정계수를 볼 때, 훈련 세트의 점수가 더욱 높게 나오는 것이 일반적이다

 

훈련 세트에서의 점수가 좋았지만 테스트 세트에서는 점수가 상당히 나쁘게 나온다면 과대적합

훈련 세트에만 잘 맞는 모델이며 새로운 샘플에 대한 예측이 제대로 이루어지지 않는 경우

 

훈련 세트보다 테스트 세트의 점수가 높거나 두 점수가 모두 너무 낮은 경우에는 과소적합

모델이 단순하여 훈련 세트에 적절히 훈련되지 않은 경우

 

훈련세트의 R-squared는 0.96 정도의 값이 나왔다

테스트 세트의 R-squared 값인 0.99와 비교했을 때 테스트 세트의 점수가 더 높게 나타났다

즉 과소적합인 것이다

 

이를 해결하기 위해서는 모델을 더 복잡하게 만들어야 한다

k-최근접 이웃 모델의 복잡도를 높이려면 이웃의 개수 k를 줄여야 한다

이웃의 개수가 줄면 근처의 특정한 패턴에 대한 민감도가 높아지기 때문이다

 

k개수 바꾼 후 결정계수 비교

 

k-최근접 이웃 모델의 이웃 개수를 바꾸기 위해서는 n_neighbors의 속성값을 바꾸면 된다

k값을 줄인 결과, 0.98로 훈련 세트의 점수가 높아졌으며 테스트 세트의 점수는 0.97로 낮아졌다

과소적합의 문제는 해결된 것으로 볼 수 있다 + 두 수치의 차이가 크지 않으므로 과대적합이라고 보기 어렵다

따라서 다른 데이터가 들어왔을 때에도 예측을 잘 할수 있을 것이라고 기대할 수 있다! 굿!


기본미션 : chapter 3-1 연습문제 2

 

기본미션 - 확인문제 2

chapter 3-1 예제에서 다룬 k-최근접 이웃 모델의 k값을 1,5,10으로 바꿔가며 훈련시키는 문제이다

그리고 농어의 길이를 5에서 45까지 바꿔가며 그래프를 그린다

 

먼저 KNeighborsRegressor를 knr에 불러와준다 

그리고 x의 범위를 지정해준다 (5에서 45)

 

이후 n_neighbors를 1,5,10으로 각각 바꿔가며 모델을 훈련시킨다

지정한 범위 x(5~45)에 대한 예측을 구하고 산점도 그래프를 각각 그려준다


선택미션 : 매개변수 설명하기

 

모델 파라미터(매개변수)란 모델 내부에서 결정되는 변수로, 머신러닝 알고리즘이 찾은 값이다

하이퍼파라미터는 머신러닝 모델이 학습할 수 없고 사람이 지정하는 파라미터를 의미한다

 

확인문제에서 다룬 k-최근접 이웃 알고리즘에서 n_neighbors 매개변수는 이웃의 개수를 의미한다

이웃의 개수 k를 줄이면 더 복잡해진 모델을 만들 수 있다

k-최근접 이웃 알고리즘은 특정 데이터에 대한 값을 구할 때 주변의 데이터를 보고 다수를 차지하는 것을 정답으로 사용하는 알고리즘이다

따라서, 참고하는 데이터의 수가 감소할수록 일반적인 패턴이 아닌 특정 데이터 주변의 패턴에 따라 예측하게 된다

그러므로 k의 수가 줄어들수록 모델이 더 복잡해진다 (확인문제의 그래프에서도 확인 가능)

n_neighbors의 디폴트 값은 5이다

확인문제에서는 1, 5, 10의 값으로 바꿔가며 확인해보았다

profile

갓생 살고 싶은 대학생 블로그

@파도의 물보라

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!