Обучение и тестирование в машинном обучении
- Предыдущая страница Масштаб
- Следующая страница Дерево решений
Оценка модели
В машинном обучении мы создаем модели для предсказания результатов某些 событий, как, например, в предыдущей главе, когда мы понимали вес и объем двигателя, предсказывали выбросы углекислого газа автомобиля.
Чтобы оценить, достаточно ли хороша модель, мы можем использовать метод, называемый обучение/тестирование.
Что такое обучение/тестирование?
Обучение/тестирование — это метод измерения точности модели.
Название «обучение/тестирование» связано с тем, что мы делим набор данных на две группы: обучающую и тестовую.
80% используется для обучения, 20% для тестирования.
Вы можете использовать обучающую выборку для обучения модели.
Вы можете использовать тестовую выборку для тестирования модели.
Тренировка модели означает создание модели.
Тестирование модели означает проверку точности модели.
Начнем с набора данных.
Начнем с тестового набора данных.
Наш набор данных показывает 100 клиентов магазина и их покупки.
Пример
import numpy import matplotlib.pyplot as plt numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x plt.scatter(x, y) plt.show()
Результат:
Ось X показывает количество минут до покупки.
Ось Y показывает,多少钱 они тратят на покупки.

Разделение обучающих/тестовых данных
Обучающие данные должны составлять 80% случайного выбора из исходных данных.
Тестовые данные должны составлять 20% от оставшихся данных.
train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:]
Показать обучающие данные
Показать гистограмму, такую же, как и для обучающих данных:
Пример
plt.scatter(train_x, train_y) plt.show()
Результат:
Они выглядят так же, как исходные данные, поэтому это seems как разумный выбор:

Показать тестовые данные
Чтобы убедиться, что тестовые данные не слишком отличаются, давайте также посмотрим на тестовые данные.
Пример
plt.scatter(test_x, test_y) plt.show()
Результат:
Тестовые данные также выглядят как исходные данные:

Фитинг данных
Каковы данные? Я думаю, наиболее подходящей моделью для их описания является полиномиальная регрессия, поэтому давайте нарисуем полиномиальную линию.
Чтобы нарисовать линию через точки данных, мы используем модуль matplotlib plott()
Метод:
Пример
Нарисовать полиномиальную регрессию, проходящую через точки данных:
import numpy import matplotlib.pyplot as plt numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) myline = numpy.linspace(0, 6, 100) plt.scatter(train_x, train_y) plt.plot(myline, mymodel(myline)) plt.show()
Результат:

Этот результат может поддерживать наше предложение о том, что данные подходят для полиномиальной регрессии, даже если мы пытаемся предсказать значения за пределами данных, это может привести к странным результатам. Например: эта строка показывает, что один клиент провел 6 минут в магазине и совершил покупку на сумму 200. Это может быть признаком переобучения.
Но что такое R-squared score? R-squared score хорошо указывает на то, насколько хорошо моё множество данных подходит под модель.
R2
Помните R2, также известный как R-квадрат (R-squared)?
Он измеряет связь между осями x и y, значения варьируются от 0 до 1, где 0 означает отсутствие связи, а 1 - полную связь.
Модуль sklearn имеет функцию rs_score()
Этот метод, который поможет нам найти эту связь.
Здесь мы будем измерять связь между временем пребывания клиентов в магазине и тем,多少钱他们 тратят.
Пример
Какова степень соответствия наших обучающих данных полиномиальной регрессии?
import numpy from sklearn.metrics import r2_score numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) r2 = r2_score(train_y, mymodel(train_x)) print(r2)
Комментарий:Результат 0.799 показывает, что связь хорошая.
Введение тестового набора
Теперь, по крайней мере в отношении обучающих данных, мы уже создали неплохую модель.
Затем, мы будем использовать тестовые данные для тестирования модели, чтобы проверить, дают ли она одинаковые результаты.
Пример
Давайте определим коэффициент R2, используя тестовые данные:
import numpy from sklearn.metrics import r2_score numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) r2 = r2_score(test_y, mymodel(test_x)) print(r2)
Комментарий:Результат 0,809表明该模型也适合测试集,we believe we can use this model to predict future values.
Предсказанные значения
Теперь我们已经确定我们的模型不错, можем начать предсказывать новые значения.
Пример
Если клиент покупает и остается в магазине 5 минут, сколько он/she потратит?
print(mymodel(5))
Этот пример прогнозирует, что клиент потратил 22,88 доллара, что似乎 соответствует графику:

- Предыдущая страница Масштаб
- Следующая страница Дерево решений