Правила и примеры
Почтовый сервис должен отличать спам от обычных писем. Программист может записать правило вручную: письмо со словом «win» в теме — спам.
def is_spam(subject):
return "win" in subject.lower()
print(is_spam("You WIN a prize")) # True
print(is_spam("Winter sale starts today")) # True
print(is_spam("Free iPhone for you")) # FalseПравило ошибается в обе стороны. Письмо о распродаже попало в спам из-за букв «win» внутри слова «Winter». Мошенническое письмо про iPhone прошло, потому что нужного слова в нём нет.
Можно дописывать исключения, но спамеры каждую неделю меняют формулировки. Правил становится тысячи, и они начинают противоречить друг другу.
Обучение на примерах
Машинное обучение (machine learning) решает задачу иначе. Программа получает не правила, а примеры с правильными ответами: тысячи писем, каждое из которых помечено как спам или не спам. Правило она находит сама. Когда спамеры сменят формулировки, модель обучают заново на свежих примерах, и правило обновляется без программиста.
Модель (model) — функция, которая по входным данным выдаёт ответ. Её поведение задают числа — параметры модели (model parameters). Обучение (training) подбирает параметры так, чтобы на примерах модель ошибалась как можно меньше.
Подбор параметра
Пусть модель предсказывает цену квартиры в миллионах по её площади: площадь умножается на параметр w. Примеры — четыре квартиры с известными ценами. Обучение пробует несколько значений w и для каждого считает суммарную ошибку на примерах:
areas = [30, 45, 60, 80]
prices = [3.1, 4.4, 6.2, 7.9]
def total_error(w):
error = 0
for area, price in zip(areas, prices):
error += abs(w * area - price)
return error
print(round(total_error(0.05), 2)) # 10.85
print(round(total_error(0.1), 2)) # 0.5
print(round(total_error(0.15), 2)) # 10.65Функция total_error складывает промахи по модулю, чтобы ошибки вверх и вниз не гасили друг друга. Меньше всего ошибка при w = 0.1, и это значение становится параметром обученной модели.
Для квартиры площадью 50 м² модель предскажет 0.1 * 50, то есть 5 миллионов. Такой квартиры среди примеров не было. Модель отвечает на новых данных по правилу, которое нашла на старых, и в этом её смысл.
Настоящие модели устроены сложнее. У них бывают тысячи параметров, и подбирают их не перебором, а быстрыми методами. Схема при этом та же: примеры с ответами, ошибка на них и параметры, при которых ошибка мала.