<출처>
- 책 : 혼자 공부하는 머신러닝 + 딥러닝
- 저자 : 박해선
- 예제 : https://github.com/rickiepark/hg-mldl
<핵심 패키지 및 함수>
1. scikit-learn
1) KNeighborsRegressor
- k-최근접 이웃 회귀 모델을 만드는 사이킷런 클래스
- n_neighbors 매개변수로 이웃의 개수를 지정 (default = 5)
2) mean_absolute_error()
- 회귀 모델의 평균 절댓값 오차를 계싼
- 첫 번째 매개변수는 타깃, 두 번째 매개변수는 예측값을 전달
- 이와 비슷한 함수로는 평균제곱오차(MSE) mean_squared_error()가 있음
<내용>
1. 분류 vs 회귀
1) 분류
- 미리 정의된, 여러 클래스 레이블 중 하나를 예측
- 이진 분류와 다중 분류로 구분
- ex) 이메일 중 스팸을 분류(이진 분류), 붓꽃 데이터(다중 분류)
2) 회귀
- 연속적인 값(실수)을 예측
- ex) 어떤 사람의 교육수준, 나이, 주거지 등의 데이터를 바탕으로 연간 소득 예측 등
2. k-최근접 이웃 회귀
1) 개념
- 내 주변의 클래스를 바탕으로 나의 클래스를 분류하는 것과 달리, 내 주변의 값의 평균을 내어 나의 값을 예측
2) 결정계수(R^2)
- '분류'에서는 정확도를 가지고 정답을 맞힌 개수의 비율로 나타냈지만, '회귀'는 예측이므로 정확한 수치로 나타내기에 어려움이 있음
- 1에 가까울수록 좋고, 0에 가깝다면 성능이 나쁜 모델
- 결정계수 식

- 3.1 예제 (회귀 - 결정계수 score)
from sklearn.neighbors import KNeighborsRegressor knr = KNeighborsRegressor() # k-최근접 이웃 회귀 모델을 훈련합니다 knr.fit(train_input, train_target) knr.score(test_input, test_target) # 출력 : 0.992809406101064
3) 과대적합 vs 과소적합
- 과대적합(overfitting): 너무 복잡한 모델을 만들어 훈련 세트에너무 가깝게 맞춰져서 새로운 데이터에 일반화 되기 어려운 경우
- 과소적합(underfitting): 너무 간단한 모델을 만들어 데이터의 다양성을 잡아내지 못하는 경우
print(knr.score(train_input, train_target))
0.9698823289099254
# 이웃의 갯수를 3으로 설정합니다 knr.n_neighbors = 3 # 모델을 다시 훈련합니다 knr.fit(train_input, train_target) print(knr.score(train_input, train_target))
0.9804899950518966
print(knr.score(test_input, test_target))
0.9746459963987609
4) 확인하기
- k-최근접 이웃 회귀 객체를 만듦
knr = KNeighborsRegressor()
- 5에서 45까지 x좌표를 만듦
x = np.arange(5, 45).reshape(-1, 1)
- 모델 훈련
- 지정한 범위 x에 대한 예측 구하기
- 훈련 세트와 예측 결과 그래프 그리기
# n = 1, 5, 10일 때 예측 결과를 그래프로 그립니다. for n in [1, 5, 10]: # 모델 훈련 knr.n_neighbors = n knr.fit(train_input, train_target) # 지정한 범위 x에 대한 예측 구하기 prediction = knr.predict(x) # 훈련 세트와 예측 결과 그래프 그리기 plt.scatter(train_input, train_target) plt.plot(x, prediction) plt.title('n_neighbors = {}'.format(n)) plt.xlabel('length') plt.ylabel('weight') plt.show()
'데이터분석' 카테고리의 다른 글
[23.07.21] 머신러닝(Random Forest) - 36(1) (0) | 2023.07.21 |
---|---|
[23.07.18] 머신러닝(선형회귀) - 33(3) (0) | 2023.07.18 |
[23.07.18] 머신러닝(iris붓꽃데이터) - 33(1) (0) | 2023.07.18 |
[23.07.17] 머신러닝(Machine Learning) - 32(1) (0) | 2023.07.18 |
[23.07.07] 프로젝트 주제 발표 - 26(1) (0) | 2023.07.07 |