Учебник по 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

Машинное обучение — полиномиальная регрессия


Полиномиальная регрессия

Если ваши точки данных явно не подходят для линейной регрессии (прямая линия через все точки данных), она может идеально подойти для полиномиальной регрессии.

Полиномиальная регрессия, как и линейная регрессия, использует взаимосвязь между переменными x и y, чтобы найти лучший способ провести линию через точки данных.


Как это работает?

В Python есть методы поиска связи между точками данных и построения линии полиномиальной регрессии. Мы покажем вам, как использовать эти методы вместо того, чтобы повторять математические формулы.

В приведенном ниже примере мы зарегистрировали 18 автомобилей, когда они проезжали определенный пункт взимания платы.

Мы зафиксировали скорость автомобиля и время суток (час), когда произошло обгон.

Ось X представляет часы дня, а ось Y представляет скорость:

Пример

Начните с рисования точечной диаграммы:

import matplotlib.pyplot as plt

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

plt.scatter(x, y)
plt.show()

Результат:

Пример

Импортируйте , numpyа matplotlibзатем нарисуйте линию полиномиальной регрессии:

import numpy
import matplotlib.pyplot as plt

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

myline = numpy.linspace(1, 22, 100)

plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

Результат:

Объяснение примера

Импортируйте необходимые модули.

Вы можете узнать о модуле NumPy в нашем учебном пособии по NumPy .

Вы можете узнать о модуле SciPy в нашем учебном пособии по SciPy .

import numpy
import matplotlib.pyplot as plt

Создайте массивы, представляющие значения осей x и y:

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

В NumPy есть метод, который позволяет нам создать полиномиальную модель:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Затем укажите, как будет отображаться строка, мы начинаем с позиции 1 и заканчиваем в позиции 22:

myline = numpy.linspace(1, 22, 100)

Нарисуйте исходную диаграмму рассеяния:

plt.scatter(x, y)

Нарисуйте линию полиномиальной регрессии:

plt.plot(myline, mymodel(myline))

Отобразите диаграмму:

plt.show()



R-квадрат

Важно знать, насколько хорошо связаны отношения между значениями осей x и y, если нет отношений, полиномиальная регрессия не может быть использована для предсказания чего-либо.

Отношения измеряются величиной, называемой r-квадратом.

Значение r-квадрата находится в диапазоне от 0 до 1, где 0 означает отсутствие связи, а 1 означает 100% связь.

Python и модуль Sklearn вычислят это значение за вас, все, что вам нужно сделать, это передать его с помощью массивов x и y:

Пример

Насколько хорошо мои данные подходят для полиномиальной регрессии?

import numpy
from sklearn.metrics import r2_score

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

print(r2_score(y, mymodel(x)))

Примечание . Результат 0,94 показывает, что существует очень хорошая взаимосвязь, и мы можем использовать полиномиальную регрессию в будущих прогнозах.


Прогнозировать будущие значения

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

Пример: попробуем предсказать скорость автомобиля, проезжающего мимо пункта взимания платы примерно в 17:00:

Для этого нам понадобится тот же mymodelмассив из примера выше:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Пример

Определите скорость автомобиля, проходящего мимо в 17:00:

import numpy
from sklearn.metrics import r2_score

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

speed = mymodel(17)
print(speed)

Пример предсказал скорость 88,87, что мы также могли прочитать на диаграмме:


Плохая посадка?

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

Пример

Эти значения для осей x и y должны очень плохо подходить для полиномиальной регрессии:

import numpy
import matplotlib.pyplot as plt

x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

myline = numpy.linspace(2, 95, 100)

plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

Результат:

И значение r-квадрата?

Пример

Вы должны получить очень низкое значение r-квадрата.

import numpy
from sklearn.metrics import r2_score

x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

print(r2_score(y, mymodel(x)))

Результат: 0,00995 указывает на очень плохую связь и говорит нам, что этот набор данных не подходит для полиномиальной регрессии.