[ML(머신러닝)] KNN 회귀모델 -1
* KNN회귀모델
- K Nearest Neighbor
1. 데이터 확인
1) 길이로 무게 예측하기
perch_length.shape, perch_weight.shape
결과 : ((56,), (56,))
- 길이 : 문제(독립변수) / 무게(연속형) : 답(종속변수)
2) 산점도 그리기
import matplotlib.pyplot as plt
plt.scatter(perch_length, perch_weight)
plt.xlabel("length")
plt.ylabel("weight")
plt.show()
<해석>
- 초반에는 곡선을 띄는 듯하다가, 중반부부터는 직선의 형태를 나타내고 있음.
- 종속변수가 연속형 데이터이기에, 선형 분포를 나타내기에 회 귀모델을 사용함.
3) 훈련 및 테스트 데이터 분류하기
* 훈련 : 테스트 = 75 : 25로 구분
사용변수 : train_input, train_target, test_input, test_target
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(perch_length,
perch_weight,
test_size=0.25,
random_state=42)
print(f"{train_input.shape} : {train_target.shape}")
print(f"{test_input.shape} : {test_target.shape}")
결과 : (42,) : (42,)
(14,) : (14,)
4) 훈련 및 테스트의 독립변수를 2차원으로 만들기
### 훈련 독립변수 2차원 만들기
train_input = train_input.reshape(-1, 1)
### 테스트 독립변수 2차원 만들기
test_input = test_input.reshape(-1, 1)
print(f"{train_input.shape} / {test_input.shape}")
결과 : (42, 1) / (14, 1)
5) 모델훈련하기
from sklearn.neighbors import KNeighborsRegressor
# 모델생성
knr = KNeighborsRegressor()
# 모델훈련시키기
knr.fit(train_input, train_target)
6) 정확도 확인
* 정확도에 대한 용어 정의
- 분류에서는 "정확도"라고 칭하며, 회귀에서는 "결정계수(R^2)이라고 칭한다.
### 훈련 정확도 확인
train_r2 = knr.score(train_input, train_target)
### 테스트 정확도 확인
test_r2 = knr.score(test_input, test_target)
print(f"훈련 : {train_r2} / 테스트 : {test_r2}")
결과 : 훈련 : 0.9698823289099254 / 테스트 : 0.992809406101064
<해석>
- 훈련 정확도는 매우 높게 나타난 성능좋은 모델로 판단됨
- 그러나, 과적합 여부를 확인한 결과 , 훈련 정확도가 테스트 정확도보다 낮게 나타난 것으로 보아
과소적합이 발생하고 있는 것으로 판단됨
- 이는 데이터의 갯수가 작거나, 튜닝이 필요한 경우로 아후 진행을 하고자 함.
여기까지 해서 길이를 가지고 무게를 예측할 수 있도록 해보았다.
하지만 해석결과 더 정확한 결과를 위해서는 튜닝이 필요했다.
다음 글에서는 그 과정을 담아보겠다.