Учебник по Python

ДОМАШНЯЯ СТРАНИЦА ПИТОН Введение в Python Python для начала Синтаксис Python Комментарии Python Переменные Python Типы данных Python Числа Python Кастинг Python Строки Python Логические значения Python Операторы Python Списки Python Кортежи Python Наборы Python Словари Python Python, если...иначе Циклы Python в то время как Python для циклов Функции Python Python лямбда Массивы Python Классы/объекты Python Наследование Питона Итераторы Python Объем Python Модули Python Даты Python Математика Python Python JSON регулярное выражение Python Картинка в картинке Python Python Попробуйте... Кроме Пользовательский ввод Python Форматирование строк Python

Работа с файлами

Обработка файлов Python Файлы чтения Python Python Запись/создание файлов Удалить файлы Python

Модули Python

Учебник по NumPy Прохождение панды Учебник по Сципи

Python Matplotlib

Введение в Matplotlib Matplotlib Начать Пилот Matplotlib Графики Matplotlib Маркеры Matplotlib Линия Matplotlib Метки Matplotlib Сетка Matplotlib Подсюжеты Matplotlib Матплотлиб Скаттер Бары Matplotlib Гистограммы Matplotlib Круговые диаграммы Matplotlib

Машинное обучение

Начиная Средняя медиана режима Среднеквадратичное отклонение Процентиль Распределение данных Нормальное распределение данных Точечная диаграмма Линейная регрессия Полиномиальная регрессия Множественная регрессия Масштаб Поезд/тест Древо решений

Python MySQL

Начать работу с MySQL MySQL Создать базу данных MySQL Создать таблицу Вставка MySQL Выбор MySQL MySQL Где Порядок MySQL MySQL Удалить Таблица удаления MySQL Обновление MySQL Лимит MySQL MySQL присоединиться

Python MongoDB

Начать работу с MongoDB MongoDB Создать базу данных MongoDB Создать коллекцию Вставка MongoDB MongoDB Найти Запрос MongoDB Сортировка MongoDB MongoDB Удалить Коллекция MongoDB Drop Обновление MongoDB Лимит MongoDB

Справочник по Python

Обзор Python Встроенные функции Python Строковые методы Python Методы списка Python Словарные методы Python Методы кортежей Python Методы набора Python Файловые методы Python Ключевые слова Python Исключения Python Глоссарий Python

Справочник по модулям

Случайный модуль Модуль запросов Модуль статистики Математический модуль cМатематический модуль

Python Как

Удалить дубликаты списка Перевернуть строку Добавить два числа

Примеры Python

Примеры Python Компилятор Python Упражнения на Python Питон Викторина Сертификат Python

Машинное обучение — обучение/тестирование


Оцените свою модель

В машинном обучении мы создаем модели для прогнозирования исхода определенных событий, как в предыдущей главе, где мы предсказывали выброс CO2 автомобиля, зная его вес и объем двигателя.

Чтобы измерить, достаточно ли хороша модель, мы можем использовать метод Train/Test.


Что такое поезд/тест

Train/Test — это метод измерения точности вашей модели.

Он называется «Обучение/тестирование», потому что вы разделяете набор данных на два набора: набор для обучения и набор для тестирования.

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()

Результат:

Это похоже на исходный набор данных, так что выбор кажется справедливым:


Отобразите набор для тестирования

Чтобы убедиться, что тестовый набор не совсем другой, мы также рассмотрим тестовый набор.

Пример

plt.scatter(test_x, test_y)
plt.show()

Результат:

Набор для тестирования также выглядит как исходный набор данных:


Соответствуйте набору данных

Как выглядит набор данных? На мой взгляд, я думаю, что лучше всего подходит полиномиальная регрессия , поэтому давайте нарисуем линию полиномиальной регрессии.

Чтобы провести линию через точки данных, мы используем plot()метод модуля matplotlib:

Пример

Нарисуйте линию полиномиальной регрессии через точки данных:

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-квадрат? Оценка R-квадрата является хорошим индикатором того, насколько хорошо мой набор данных соответствует модели.


R2

Помните R2, также известный как R-квадрат?

Он измеряет взаимосвязь между осью x и осью y, а значение находится в диапазоне от 0 до 1, где 0 означает отсутствие взаимосвязи, а 1 означает полную взаимосвязь.

В модуле sklearn есть метод r2_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 показывает, что отношение OK.

Принесите набор для тестирования

Теперь мы создали модель, в которой все в порядке, по крайней мере, когда речь идет об обучающих данных.

Теперь мы также хотим протестировать модель с тестовыми данными, чтобы увидеть, даст ли нам тот же результат.

Пример

Найдем оценку 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 показывает, что модель также подходит для тестового набора, и мы уверены, что можем использовать модель для прогнозирования будущих значений.


Предсказать значения

Теперь, когда мы установили, что наша модель в порядке, мы можем начать прогнозировать новые значения.

Пример

Сколько денег потратит покупатель, если он останется в магазине на 5 минут?

print(mymodel(5))

Пример предсказал, что клиент потратит 22,88 доллара, что соответствует диаграмме: