코딩헤딩

[ML(머신러닝)] KNN 회귀모델 -1 본문

머신러닝 | 딥러닝

[ML(머신러닝)] KNN 회귀모델 -1

멈머이 2023. 12. 23. 13:39
728x90

* 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

<해석>

  - 훈련 정확도는 매우 높게 나타난 성능좋은 모델로 판단됨
  - 그러나, 과적합 여부를 확인한 결과 , 훈련 정확도가 테스트 정확도보다 낮게 나타난 것으로 보아

     과소적합이 발생하고 있는 것으로 판단됨
  - 이는 데이터의 갯수가 작거나, 튜닝이 필요한 경우로 아후 진행을 하고자 함.


여기까지 해서 길이를 가지고 무게를 예측할 수 있도록 해보았다. 

하지만 해석결과 더 정확한 결과를 위해서는 튜닝이 필요했다.

다음 글에서는 그 과정을 담아보겠다.

728x90