Регрессия с более чем 1 функцией называется многомерной и почти то же самое, что и линейная, только с небольшими изменениями.

В моем предыдущем посте я говорил о линейной регрессии с нуля в python. Посмотрите, нет ли у вас Щелкните здесь.

В этом разделе мы увидим, как мы можем реализовать многомерную регрессию. Я был бы очень признателен, если бы вы немного освежили информацию о многомерной регрессии. Если вы ищете какой-нибудь учебник, я бы порекомендовал andrew-ng Проверить this out , хорошее описание того, чем многомерная регрессия отличается от линейной регрессии, как изменяется формула.

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

и так же, как изменяется формула гипотезы, количество тэтов будет n + 1 (здесь они называются b)

Давайте начнем с части кодирования и объясним бок о бок, используемый набор данных - это диабет из библиотеки sklearn, вы можете использовать гораздо больше, например, жилье в Бостоне, просто необходимо для прогнозирования набора данных для этого случая и иметь более одной функции.

Загрузка данных

Это в значительной степени говорит само за себя, просто загрузил набор данных из sklearn. Давайте посмотрим, как выглядят наши данные, у нас есть 10 функций.

Хотя набор данных довольно мал, но давайте посмотрим, что мы можем с этим сделать.

Еще немного обработки данных

Нам также нужно добавить 1 к нашему X, чтобы размер X был равен размеру тэта, например, X имеет m строк (длина набора данных) и имеет n столбцов, но мы знаем, что нам нужно добавить еще 1 функцию, поэтому что X (m, n + 1) == thetas (n + 1) для этого мы можем использовать numpy

Функция гипотезы

точно так же, как линейная регрессия, формула такая же, просто теты и функции увеличились, поэтому мы будем делать их с помощью цикла, который повторяет функции по функциям, здесь каждое значение x (отдельная функция в i-й раз) умножается на i ' th theta, и мы добавляем это к нашему результату, здесь строки на самом деле n функций

Функция потерь

мы будем использовать те же потери (среднеквадратичная ошибка), и на самом деле код такой же, как и в линейной регрессии, Здесь X - матрица (442x10), мы передаем всю матрицу

Производная функции стоимости Jø

как мы знаем, нам нужно найти тета для n значений, которые представляют собой количество функций, поэтому нам нужны два вложенных цикла: один для функций, а другой для итерации по всей строке набора данных

Функция градиентного спуска для обучения

Теперь нам нужно найти все тэты (n + 1), также давайте найдем общую потерю. Здесь нам также нужны два вложенных цикла: один для количества эпох, а другой для цикла по всем тэтам и корректировки их значений с помощью формула

Взамен вы получаете тэту и список потерь.

ИСХОД

Давайте посмотрим на потерю и построим ее с помощью matplotlib, мы увидим большую потерю, возможно, потому, что данных очень мало для обучения, а функции увеличивают сложность

Рейтинг r2_score

для r2_score нам сначала нужны прогнозы, и мы можем получить их с помощью созданных нами тэтов и функции прогнозирования.

Дальнейшая оптимизация

Точность довольно низкая, и это из-за того, что у нас есть данные, которых всего 442, для лучшего нам может понадобиться больший набор данных, а также мы можем поиграть с гиперпараметрами (скорость обучения, время), но на данный момент мы получили почти 60%

Здесь, как вы можете видеть, мы использовали вложенные циклы почти в каждой функции, чтобы перебирать тета и строки, что увеличивает временную сложность программы, и для этого мы можем использовать широковещательную передачу в python, например, для создания продукта .dot () и использования. sum (), который может выполнять работу за O (1).