Menu
CoddyTech

학습 곡선

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 33번째.

데이터가 더 많으면 모델이 더 좋아질까요? 학습 곡선이 이를 보여 줍니다. 학습 세트가 커짐에 따라 테스트 정확도가 어떻게 변하는지 확인할 수 있습니다. 여기서는 두 개의 달 모양 데이터에 깊은 트리를 사용합니다.

학습 행이 25개에서 800개로 늘어날 때의 정확도. 학습 곡선은 내내 1.0에 머물고, 테스트 곡선은 0.80에서 0.94까지 상승합니다.

트리는 모든 학습 세트를 암기하지만, 행이 하나 추가될 때마다 실제로 무언가를 배웁니다. 유연한 모델은 데이터로부터 가장 많은 이점을 얻습니다.

처음 n개의 학습 행으로 학습한 다음, 매번 동일한 테스트 행에서 점수를 계산합니다:

sizes = [25, 50, 100, 200, 400, 800]
test_scores = []
for n in sizes:
    tree = DecisionTreeClassifier(random_state=0)
    tree.fit(X_train[:n], y_train[:n])
    test_scores.append(tree.score(X_test, y_test))
ax.plot(sizes, test_scores, marker="o")

오른쪽 가장자리에서도 여전히 상승하고 있나요? 데이터를 더 추가하면 도움이 됩니다.

challenge icon

챌린지

중급

기록을 더 많이 사용하면 두 올빼미 종을 구별하는 데 도움이 될까요? 시작 코드에서는 울음소리 600개를 나누고 두 모델과 차트를 준비합니다.

  1. sizes의 각 n에 대해 처음 n개의 학습 행으로 두 모델을 모두 학습시키고, 각 모델의 테스트 정확도를 저장하세요.
  2. 각 모델의 향상 폭, 즉 마지막 점수에서 첫 번째 점수를 뺀 값을 소수점 아래 3자리까지 출력하세요.
  3. sizes를 기준으로 두 모델의 값을 모두 그래프로 그리세요. marker="o"를 사용하고, 레이블은 logistic과 tree로 지정한 뒤 범례를 표시하세요.

다른 숲에 사는 올빼미들의 결과는 다음과 같습니다.

Logistic gains 0.053 from more data
Tree gains 0.160 from more data

그리고 아래 차트를 그립니다. 그러면 Coddy가 여러분의 결과를 설명합니다.

Owl Calls: Learning Curves. 로지스틱 선은 0.64에서 약 0.69까지 올라간 뒤 평평하게 유지되고, 트리 선은 0.67에서 0.83까지 꾸준히 상승합니다.

직접 해보기

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

# 아래 줄은 변경하지 마세요: 올빼미 울음소리 600개, 음높이 (Hz) 및 길이 (s)
rng = np.random.default_rng(23)
pitch = np.round(rng.uniform(300, 900, 600))
length = np.round(rng.uniform(0.2, 2.0, 600), 2)
# 종 1인 황갈색올빼미는 음높이에 비해 더 길게 웁니다. 일부 현장 기록은 잘못되었습니다
longer = length > 0.5 + 6.4 * ((pitch - 600) / 600) ** 2
wrong_note = rng.random(600) < 0.05
species = np.where(longer != wrong_note, 1, 0)
X = np.column_stack([pitch, length])
X_train, X_test, y_train, y_test = train_test_split(X, species, test_size=0.25, random_state=0)

sizes = [25, 50, 100, 200, 400]
logistic = LogisticRegression(max_iter=1000)
tree = DecisionTreeClassifier(random_state=0)

fig, ax = plt.subplots()
ax.set_title("Owl Calls: Learning Curves")
ax.set_xlabel("Training rows")
ax.set_ylabel("Test accuracy")

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러