Menu
CoddyTech

적합도는 얼마나 좋을까?

Coddy Machine Learning 여정의 머신러닝을 위한 통계 섹션에 포함된 레슨. 64개 중 39번째.

모든 구름에는 직선이 그어지므로 적합도에는 점수가 필요합니다. 한 선원이 바람과 보트의 속도를 기록했습니다. 직선의 제곱 오차와 가장 단순한 예측인 평균의 제곱 오차를 비교해 보세요:

각각 점 6개가 있는 두 패널, 바람에 따른 보트 속도. 왼쪽: 평균을 나타내는 수평선과 점들 사이에 긴 빨간 간격이 있으며, 제곱 오차는 16.23입니다. 오른쪽: 적합된 직선과 아주 짧은 빨간 간격이 있으며, 제곱 오차는 0.35입니다

R 제곱은 직선이 설명하는 분산의 비율입니다:

wind = np.array([6, 8, 10, 12, 15, 18])
boat = np.array([3.1, 4.4, 4.9, 6.2, 6.8, 8.1])
slope, intercept = np.polyfit(wind, boat, 1)
predicted = slope * wind + intercept
ss_res = ((boat - predicted) ** 2).sum()  # 적합값: 0.35
ss_tot = ((boat - boat.mean()) ** 2).sum()  # 평균: 16.23
print(np.round(1 - ss_res / ss_tot, 3))

이것은 0.979를 출력합니다. 이 선은 속도 변동의 98%를 설명합니다. 1은 완벽한 선이고, 0은 평균보다 나을 것이 없습니다.

숫자를 예측하는 모델의 표준 평가 지표입니다. 적합된 직선의 경우, r 제곱과 같습니다.

challenge icon

챌린지

중급

버섯 농장에서 mushrooms.csv에 재배 베드 16개의 기록을 남겼습니다. 프로그램은 열 이름을 읽고, 시작 코드에서는 해당 열을 사용해 harvest_kg를 예측하는 직선을 맞춥니다. 보고서에 필요한 r_squared는 아직 비어 있습니다.

  1. r_squared(y, predicted)를 완성하여 R 제곱 값을 반환하도록 하세요.
  2. 마지막에 확인 결과를 출력하세요. x와 y의 상관계수를 제곱하고 100을 곱한 뒤 소수점 첫째 자리까지 반올림합니다.

다른 농장에서 입력값이 humidity인 경우:

humidity explains 27.0% of the harvest variation
Check with r squared: 27.0%

직접 해보기

import numpy as np
import pandas as pd


# y에 대한 예측값의 결정계수를 반환합니다
def r_squared(y, predicted):
    # 여기에 코드를 작성하세요
    return 0


beds = pd.read_csv("mushrooms.csv")
column = input()
# 아래 줄은 변경하지 마세요
x = beds[column]
y = beds["harvest_kg"]
slope, intercept = np.polyfit(x, y, 1)
predicted = slope * x + intercept
r2 = r_squared(y, predicted)
print(f"{column} explains {np.round(r2 * 100, 1)}% of the harvest variation")

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

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

머신러닝을 위한 통계의 모든 레슨

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