과소적합과 과적합
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 32번째.
머신러닝의 가장 큰 함정, 즉 k = 1과 깊은 트리가 데이터를 암기하는 문제를 접했습니다. 이 장에서는 이 문제에 이름을 붙이고 다음과 같은 차트로 마무리합니다.
함정: 바질 15그루에 서로 다른 방식으로 물을 주고, 수확량에 세 곡선을 맞췄습니다:
1차는 너무 단순합니다: 과소적합. 12차는 모든 훈련 점을 통과하며 그 사이를 오갑니다: 과적합, 학습하는 것이 아니라 암기하는 것입니다.
np.polyval(coefs, x)는 곡선의 높이를 반환합니다. 훈련 및 테스트 RMSE(그램 단위):
for degree in [1, 3, 12]:
coefs = np.polyfit(water_train, grams_train, degree)
train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
print(degree, round(train_err), round(test_err))다음과 같이 출력됩니다:
1 156 138
3 15 19
12 9 173과적합의 징후: 훈련 오차는 작고 테스트 오차는 크다.
챌린지
중급풍력 발전소는 풍속을 바탕으로 터빈 하나의 출력을 모델링합니다. 시작 코드는 측정값 24개를 분할하고 max_degree를 읽습니다.
- 1부터
max_degree까지 각 차수에 대해 학습 데이터로 곡선을 적합하고, 학습 및 테스트 RMSE를 정수 kW 단위로 출력합니다. - 테스트 오차가 학습 오차의 2배를 초과하는 첫 번째 차수를 출력하거나,
No overfitting up to degree와max_degree를 출력합니다.
다른 터빈과 7의 경우:
Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7직접 해보기
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
max_degree = int(input())
# 아래 줄은 변경하지 마세요: 풍력 터빈 한 대의 풍속 (m/s)과 출력 (kW)
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
speed, power, test_size=0.25, random_state=0)
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러