본문 바로가기

ML,DL

[ML] K-최근접 이웃 회귀

k-최근접 이웃 회귀

예측하려는 샘플에 가장 가까운 샘플 k개를 선택

이웃 샘플의 수치를 사용해 새로운 샘플 x의 타깃을 예측 -> 이웃 수치들의 평균을 구해서 예측

 Reshape

 numpy의 reshape() 메소드  : 배열의 크기를 바꿀 수 있음

test_array = test_array.reshape(2,2)  : (2,2) 크기로 배열 바꾸기

2차원 배열로 바꾸기

크기에 -1을 지정하면 나머지 원소 개수로 모두 채운다

ex ) 첫 번째 크기를 나머지 원소 개수로 채우고, 두번째 크기를 1로 하려면

train_input.reshape(-1,1)

 

결정계수(R2)

각 샘플의 타깃과 예측한 값의 차이를 제곱하여 더함, 그다음 타깃과 타깃 평균의 차이를 제곱하여 더한 값으로 나눔

타깃의 평균 정도를 예측하는 수준이라면 0에 가까워지고,

예측이 타깃에 아주 가까워지면 1에 가까워짐

from sklearn.neighbors import KNeighborsRegressor
knr = KNeighborsRegressor()

knr.fit(train_input, train_target)

# 결정계수
print(knr.score(test_input, test_target))

score() 값이 높을수록 좋음

MAE(mean absolute error)

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

from sklearn.metrics import mean_absolute_error

test_prediction = knr.predict(test_input)

# 테스트 세트에 대한 평균 절댓값 오차를 계산
mae = mean_absolute_error(test_target, test_prediction)
print(mae)

 

과대적합 vs 과소적합

과대적합(overfitting) : 훈련 세트에서 점수가 굉장히 좋았는데 테스트 세트에서 점수가 나쁠 때, 모델이 훈련 세트에 과대적합

과소적합(underfitting) : 훈련 세트보다 테스트 세트의 점수가 높거나 두 점수가 모두 너무 낮은 경우, 모델이 훈련 세트에 과소적합 됨

이웃의 개수를 조정해 가면서 성능 측정해보기

# 데이터는 확보
# 모델을 만들고 학습하고 평가해서 값을 출력하는 함수를 만들고 매개변수는 이웃의 개수를 받도록 설계
# 이 함수를 for n in [1,3,5,7,9,10,20,42] 에 넣고 실행

def f_kn(neighbors):
  kn = KNeighborsRegressor()
  kn.n_neighbors = neighbors

  # score
  kn.fit(X_train,y_train)
  train_score = kn.score(X_train,y_train)
  test_score = kn.score(X_test,y_test)

  # MAE
  X_test_predict = kn.predict(X_test)
  test_mae = mean_absolute_error(y_test,X_test_predict)  
  X_train_predict = kn.predict(X_train)
  train_mae = mean_absolute_error(y_train, X_train_predict)

  print(f"number of neighbors = {neighbors}")
  print(f"SCORE train : {train_score}, test : {test_score}")
  print(f"MAE test : {test_mae} , train : {train_mae}")

for n in [1,3,5,7,9,10,20,42]:
   f_kn(n)

 

'ML,DL' 카테고리의 다른 글

[ML] 확률적 경사 하강법  (0) 2024.04.08
[ML] 로지스틱 회귀 Logistic Regression  (0) 2024.04.08
[ML] Ridge, Lasso Regression  (0) 2024.04.08
[ML] 다중 회귀 multiple regression  (0) 2024.04.05
[ML] 선형 회귀 Linear Regression  (0) 2024.04.05