Регрессия с более чем 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).