Насколько хороша аппроксимация?
Часть раздела Статистика для машинного обучения путешествия по Machine Learning на Coddy. Урок 39 из 64.
Для любого облака точек можно провести линию, поэтому качество подгонки нужно оценивать. Моряк записывал скорость ветра и лодки: сравним сумму квадратов ошибок линии с суммой квадратов ошибок среднего — самого ленивого прогноза:
Коэффициент детерминации 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 squared.
Задание
СреднеНа грибной ферме зарегистрировали 16 грядок для выращивания в mushrooms.csv. Программа считывает название столбца, а начальный код подбирает прямую, которая предсказывает harvest_kg по этому столбцу. В отчёте должно быть значение r_squared, которое пока не вычисляется.
- Дополните
r_squared(y, predicted), чтобы она возвращала коэффициент детерминации R². - В конце выведите проверочное значение: корреляцию между
xиy, возведённую в квадрат, умноженную на 100 и округлённую до 1 знака после запятой.
Для другой фермы и входных данных humidity:
humidity explains 27.0% of the harvest variation
Check with r squared: 27.0%Попробуйте сами
import numpy as np
import pandas as pd
# Возвращает коэффициент детерминации R² для предсказаний 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")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Статистика для машинного обучения
1Центр и разброс
Среднее и медианаПроцентили и квартилиДисперсия и стандартное отклонениеВыборка или генеральная совокупность?Самое частое значениеПовторение: сроки доставки4Выборки и генеральные совокупности
Генеральная совокупность и выборкаСредние значения выборок различаютсяРаспределение выборочных среднихЧем больше выборка, тем меньше шумИтоги: опрос жителей города7Линии тренда
ОстаткиМетод наименьших квадратовПостроение линии аппроксимацииПредсказания с помощью линииНасколько хороша аппроксимация?Повторение: часы практики2Распределения
Гистограммы плотностиФормы распределения данныхНормальная криваяПравило 68–95–99,7Z-оценкиПовторение: время работы батареи3Вероятность с помощью моделирования
Вероятность как частотаЗакон больших чиселСуммы значений на кубикахМатематическое ожиданиеУсловная вероятностьПовторение: шансы в игре в кости6Взаимосвязи
Чтение диаграмм рассеянияКорреляцияМатрица корреляцийТепловые карты корреляцийКорреляция не означает причинностьПовторение: мороженое и солнцеПотренируйтесь самостоятельно: Онлайн-компилятор Python