회귀 : 임의의 수치를 예측하는 문제
- 분류 : 샘플의 몇 갸의 클래스 중 하나로 분류
- 회귀 : 클래스 중 하나로 분류하는 것이 아리나 임의의 어떤 숫자를 예측 두 변수 사이의 상관관계를 분석하는 방법
K - 최근접 이웃 회귀 : 가장 가까운 이웃 샘플을 찾고 이 샘플들의 타깃값을 평균하여 예측
결정계수(R^2) : 1에 가까울수록 좋고, 0에 가까울수록 성능이 나쁜 모델
과대적합 : 훈련 세트 성능 > 테스트 세트 성능
과소 적합 : 훈련 세트 성능 < 테스트 세트 성능
scikit-learn
-
KNeighborsRegressor : K - 최근접 이웃 회귀 모델을 만드는 사이킷런 클래스, n_neighbors 매개변수로 이웃의 개수 지정
-
mean_absolute_error() : 회귀모델의 평균 절댓값 오차를 계산, (타깃, 예측값)
타깃과 예측을 뺀 값을 제곱한 다음 전체 샘플에 대해 평균한 값 반환
실습 설명
# 2차원 배열로 만들기
train_input = train_input.reshape(-1, 1)
test_input = test_input.reshape(-1, 1)
print(train_input.shape, test_input.shape)
[1, 2, 3] -> 크기 ; (3, ) : 1차원 배열 [[1],[2],[3]] -> 크기 : (3,1) : 2차원 배열
test_array = np.array([1,2,3,4])
# 출력 (4,)
test_array = test_array.reshape(2, 2)
#출력 (2, 2)
배열의 크기를 자동으로 지정하는 기능 **.reshape(-1,1) **
크기에 -1 지정 -> 나머지 원소 개수로 모두 채움
# K - 최근접 회귀 알고리즘
from sklearn.neighbors import KNeighborsRegressor
knr = KNeighborsRegressor()
# 훈련
knr.fit(train_input, train_target)
# 테스트 세트 점수
knr.score(test_input, test_target)
# 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)
- 과대 적합 : 훈련 세트에서 점수가 좋은데 테스트 세트에서는 점수가 나쁘면 모델이 훈련 세트에 과대적합
-> 훈련 세트에만 잘 맞는 모델이라 테스트 세트와 새로운 샘플에 대한 예측 작동 나쁨
- 과소 적합 : 훈련세트 보다 테스트 세트의 점수가 높거나 두 점수가 모두 낮음, 모델이 훈련세트에 과소 적합, 모델이 너무 단순해 훈련세트에 적절히 훈련 안 됨
일어나는 이유 : 훈련 세트와 테스트 세트의 크기가 매우 작기 때문
# 과소 적합 해결 -> 모델을 더 복잡하게 만들기
# 이웃의 갯수 변경 ( 기본 값 = 5 )
knr.n_neighbors = 3
knr.fit(train_input, train_target)
print(knr.score(train_input, train_target))
- K - 최근접 이웃 회귀에서는 새로운 샘플에 대한 예측을 어떻게 만드나요?이웃 샘플의 타깃값의 평균
정답