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

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


Регрессия

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

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


Линейная регрессия

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

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

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


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

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

В приведенном ниже примере ось X представляет возраст, а ось Y — скорость. Мы зафиксировали возраст и скорость 13 автомобилей, когда они проезжали пункт взимания платы. Давайте посмотрим, можно ли использовать собранные нами данные в линейной регрессии:

Пример

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

import matplotlib.pyplot as plt

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

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

Результат:

Пример

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

import matplotlib.pyplot as plt
from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

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

Результат:

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

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

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

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

import matplotlib.pyplot as plt
from scipy import stats

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

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

Выполните метод, который возвращает некоторые важные ключевые значения линейной регрессии:

slope, intercept, r, p, std_err = stats.linregress(x, y)

Создайте функцию, которая использует значения slopeи interceptдля возврата нового значения. Это новое значение представляет, где на оси Y будет размещено соответствующее значение x:

def myfunc(x):
  return slope * x + intercept

Пропустите каждое значение массива x через функцию. Это приведет к созданию нового массива с новыми значениями для оси Y:

mymodel = list(map(myfunc, x))

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

plt.scatter(x, y)

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

plt.plot(x, mymodel)

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

plt.show()



R для отношений

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

Это отношение — коэффициент корреляции — называется r.

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

Python и модуль Scipy вычислят это значение для вас, все, что вам нужно сделать, это передать ему значения x и y.

Пример

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

from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

print(r)

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


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

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

Пример: попробуем предсказать скорость 10-летней машины.

Для этого нам понадобится та же myfunc()функция из примера выше:

def myfunc(x):
  return slope * x + intercept

Пример

Предсказать скорость автомобиля возрастом 10 лет:

from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

speed = myfunc(10)

print(speed)

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


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

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

Пример

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

import matplotlib.pyplot as plt
from scipy import stats

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]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

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

Результат:

А то rдля отношений?

Пример

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

import numpy
from scipy import stats

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]

slope, intercept, r, p, std_err = stats.linregress(x, y)

print(r)

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