챕터03-1과 같이 농어 데이터를 훈련세트와 테스트세트로 나누어서 2차원 배열로 변환한다.
몸 길이가 50cm인 농어의 무게를 예측해보았는데
1033g으로 예측했다 -> 농어의 실제 무게가 아니다!
그래서 산점도 그래프를 그려보았더니
산점도를 보면 길이가 커질수록 농어의 무게가 증가하지만, 50cm 길이의 농어에서 가장 가까운 데이터는 45cm 근방이기 때문에 k-최근접 이웃 알고리즘은 이 샘플들의 무게를 평균한다
이웃 샘플의 타깃의 평균을 구하면
50cm의 농어의 무게와 일치하는 것을 확인할 수 있다. 즉, 농어의 길이가 아무리 늘어나도 무게는 1033g으로 예측한다는 의미이다
선형 회귀(linear regression)
- 특성이 하나인 경우 특성을 가장 잘 나타내는 직선을 학습하는 알고리즘
- 머신러닝의 가장 큰 목적은 실제 데이터를 바탕으로 모델을 생성해서 만약 다른 입력 값을 넣었을 때 발생할 아웃풋을 예측하는 데에 있다. 이때 우리가 찾아낼 수 있는 가장 직관적이고 간단한 모델은 선(line)이다. 그래서 데이터를 놓고 그걸 가장 잘 설명할 수 있는 선을 찾아 분석하는 방법을 선형 회귀(Linear Regression) 분석이라 부른다.
사이킷런은 sklearn.linear_model 패키지 아래에 LinearRegression 클래스로 선형 회귀 알고리즘을 구현해 놓았다.
선형 회귀는 50cm 농어의 무게를 k-최근접 이웃 회귀를 사용했을 때보다 더 높게 예측했다.
하나의 직선을 그리기 위해서 기울기와 절편이 필요하다
y = a * x + b
LinearRegression 클래스가 찾은 a(기울기)와 b(절편)는 lr객체의 coef_와 intercept_ 속성에 저장되어 있다.
- '_' 기호는 머신러닝에서 훈련 데이터에서 유도된 결과를 나타내는 기호로 사용자가 지정한 매개변수와 구분시키기 위함이다.
- 선형회귀가 찾은 특성과 타깃 사이의 관계는 선형 방정식의 계수 또는 가중치에 저장된다. 가중치는 방정식의 기울기와 절편을 모두 의미하는 경우가 많다.
coef_는 속성이 각 입력 특성에 하나씩 대응되는 numpy배열을 나타내고 intercept_는 항상 실수 값(절편) 하나만을 나타낸다.
농어의 길이 15에서 50까지를 직선으로 그려보자
산점도를 통해 훈련 세트 범위를 벗어난 농어의 무게도 예측할 수 있음을 알게되었다
훈련세트와 테스트세트에 대한 결정계수(R^2) 점수를 확인해보자
훈련세트와 테스트세트의 점수가 차이가 많이 나고 둘 다 점수가 낮아 과소적합되었다고 판단할 수 있다
또한 산점도 그래프의 왼쪽 아래를 보면 농어의 무게가 0g이하로 예측할 수도 있다.
이를 막기 위해 이차방정식이 필요하다
y = a * x^2 + b * x + c
이차방정식의 그래프를 그리려면 길이를 제곱한 항이 훈련세트에 추가되어야 한다. 넘파이를 이용해 농어의 길이를 제곱해서 원래 데이터 앞에 붙여보자
column_stack()함수를 사용해 train_input을 제곱한 것과 train_input 두 배열을 나란히 붙힌다.
원래 데이터 길이와 길이의 제곱이 되어 2개의 열이 완성되었다.
선형 회귀 모델을 train_poly를 통해 다시 훈련시켜보자
일차방정식을 이용한 모델보다 50cm 농어의 무게를 더 높은 값으로 예측했다.
이 모델이 훈련한 계수와 절편은
으로, 즉,
무게 = 1.01 * 길이^2 - 21.6 * 길이 + 116.05
와 같은 그래프를 학습했다.
이런 방정식을 다항식(polynomial)이라고 부르며 다항식을 사용한 선형 회귀를 다항 회귀(polynomial regression)라고 부른다.
다항 회귀 모델을 통해 그린 산점도에서 훈련 세트의 경향을 잘 따르고 무게가 음수로 나오는 일도 없어보인다.
훈련세트와 테스트세트의 결정계수 점수를 출력해보면
훈련세트와 테스트세트에 대한 점수가 크게 높아졌지만 여전히 테스트세트의 점수가 훈련세트보다 더 높은 것으로 보아 과소적합이 남아있음을 확인할 수 있다.
이 보다 더 복잡한 모델이 필요하다!
'머신러닝 + 딥러닝' 카테고리의 다른 글
[혼공머신] CHAPTER 04-1 로지스틱 회귀 (0) | 2021.09.28 |
---|---|
[혼공머신] CHAPTER 03-3 특성공학과 규제 (0) | 2021.09.23 |
[혼공머신] CHAPTER 03-1 k-최근접 이웃 회귀 (0) | 2021.09.16 |
[혼공머신] CHAPTER 02 데이터 다루기 (0) | 2021.09.10 |
[혼공머신] CHAPTER 01 나의 첫 머신러닝 (0) | 2021.09.10 |