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

Вы можете проверить эти статьи по данной ссылке ниже:

  1. Линейная регрессия — https://medium.com/@pdhameliya3333/linear-regression-implementation-from-scratch-de3135939372
  2. Логистическая регрессия — https://medium.com/@pdhameliya3333/logistic-regression-implementation-from-scratch-3dab8cf134a8

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

Часть 1. Линейная регрессия с использованием нормального уравнения

Представление модели:

Входная переменная или характеристики (X): Размер дома (кв. футы)

Выходная переменная или цель (Y): цена дома

m : Количество обучающих примеров

n : Количество функций

X(i) : i-й обучающий пример, например, X(1) равен 2104 X(2) равен 1416 аналогично y(i)

Функция гипотезы или прогноза. Мы будем обозначать функцию прогнозирования как H(Θ).

H(Θ) = Θ0*X0(i) + Θ1*X1(i)

Здесь X0(i)=1.

Вместо того, чтобы вычислять цикл для нахождения H(Θ) = Θ0*X0(i) + Θ1*X1(i), мы собираемся реализовать векторизацию, и следующее может быть преобразовано в:

H(Θ) = X * Θ

Здесь матрица X содержит такую ​​характеристику, как X1 = размер в квадратных футах, аналогично Y содержит целевую переменную Price ($) в тысячах. Здесь X0 - вектор единиц.

где X имеет размерность (m, n + 1) и тета с размерностью (n + 1,1), где n - количество признаков. Здесь число признаков равно 1, т.е. размер квадратных футов и включая вектор-столбец из единиц. (X0), так что размерность X становится (m,n+1)

Если у нас есть более одной функции, например, размер дома и количество спален для прогнозирования цены дома, тогда наша матрица будет [X0 X1 X2], где X0 = вектор единиц, X1 = размер дома, а X2 = количество спален.

Чтобы найти значение Θ, мы собираемся использовать нормальное уравнение.

Приведенное выше уравнение дает значение Θ.

Получив значение Θ, вставьте его в нашу функцию прогнозирования H(Θ) для прогнозирования.

При использовании нормального уравнения нет необходимости применять к данным нормализацию признаков.

Функция стоимости. Чтобы измерить ошибку между фактическим y и (H(Θ)) предсказанным y, нам нужна метрика ошибки, т. е. функция стоимости J(Θ).

J(θ) = (1/2m)*сумма((H(Θ)-y)²)

Вы также можете использовать среднеквадратичную ошибку, т. е. sq-root (mean (H (Θ) -y)²).

m : количество обучающих примеров (строк)

H(Θ): предсказанный y

Итак, мы заканчиваем с простой схемой процесса следующим образом:

Часть 2. Логистическая регрессия с использованием нормального уравнения

Давайте начнем процесс обучения шаг за шагом с примера. Предположим, мы хотим обнаружить диабет независимо от того, есть ли у субъекта диабет или нет. Здесь у нас есть два класса, независимо от того, есть ли у субъекта диабет или нет (1 или 0).

Представление модели:

Входная переменная или характеристики (X): глюкоза, артериальное давление, инсулин, возраст и т. д.

Выходная переменная или цель (Y): 1 или 0 (диабет — да [1] или отсутствие диабета — нет [0]). Здесь наша целевая переменная — «Результат».

m : количество обучающих примеров (строк)

n : Количество характеристик (столбцы; исключая столбец «Цель»). Здесь количество характеристик равно 8. [Беременность, Глюкоза, Артериальное давление, Толщина кожи, Инсулин, ИМТ, Диабет, Родословная, Функция, Возраст]

X(i) : i-й обучающий пример, например, X1(0) равен 6 X1(1) равен 1 аналогично y(i)

Здесь Матрица X содержит функции, например, для X1 = Беременности, X2 = Глюкоза, X3 = Артериальное давление и т. д. Здесь X имеет размерность (m, n + 1) и тета с размерностью (n + 1,1), где n - число функций. Здесь включая вектор-столбец из единиц (X0), так что размерность X становится (m, n + 1).

Теперь здесь Θ изначально принимается равным нулю, мы хотим, чтобы значение тета было соответствующим, чтобы общее значение H (Θ), то есть предсказанное y, имело минимальную ошибку с фактическим y.

Матрица Y представляет собой целевую переменную, т.е. Y = результат из вышеуказанного набора данных.

Функция гипотезы или прогноза. Мы будем обозначать функцию прогнозирования как H(Θ).

Z = Θ0*X0(i) + Θ1*X1(i)

H(Θ) = g(Θ0*X0(i) + Θ1*X1(i))

H(Θ) = g(Z)

Здесь g(Z) — сигмовидная функция, принимающая значения от 0 до 1.

Если H(Θ) ≥ 0,5, то H(Θ) = 1

например, если H(Θ) = 0,7, это означает, что у субъекта 70% шансов на диабет, а 30% говорит, что у него нет диабета.

Если H(Θ) ‹ 0,5, то H(Θ) = 0

например, если H(Θ) = 0,2, это означает, что у субъекта 20% шансов на диабет, а 80% говорит, что у него нет диабета.

Вместо того, чтобы вычислять цикл, чтобы найти Z = Θ0 * X0 (i) + Θ1 * X1 (i), мы собираемся реализовать векторизацию, и следующее может быть преобразовано в:

Z = X*Θ

H(Θ) = g(Z)

Чтобы найти значение Θ, мы собираемся использовать нормальное уравнение.

Функция стоимости. Чтобы измерить ошибку между фактическим y и (H(Θ)) предсказанным y, нам нужна метрика ошибки, т. е. функция стоимости J(Θ).

J(Θ) =-(1/m)* (y .T*log(hΘ(x (i) )) +(1 − y ).T* log(1 − hΘ(x (i) )))

T = транспонировать матрицу

m : количество обучающих примеров (строк)

H(Θ): предсказанный y

Итак, мы заканчиваем с простой схемой процесса следующим образом:

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

Когда использовать с градиентным спуском:

  1. когда n большое, то есть когда функции большие, градиентный спуск будет работать хорошо.
  2. В градиентном спуске нам нужно выбрать альфа, нет. итераций.

Когда использовать нормальное уравнение:

  1. Когда n мало, т.е. когда функции малы, нормальное уравнение будет работать хорошо.

Потому что нужно вычислить (X.T*X)^-1, что требует значительных вычислительных ресурсов.

2. В нормальном уравнении нам не нужно выбирать альфа, нет. итераций.

Теперь давайте начнем с части кодирования.

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

Мы собираемся использовать набор данных cbse 12-го класса 2013 года для прогнозирования оценок по математике с помощью других предметов.

Вы можете скачать ссылку на набор данных ниже:

https://s3.amazonaws.com/hr-testcases/1256/assets/trainingAndTest.zip

import pandas as pd
import numpy as np

Мы собираемся использовать pandas для импорта файла training.json и numpy для части матричной алгебры.

data = pd.read_json("training.json",lines=True)
data = data.fillna(0)

Теперь мы собираемся разделить наш набор данных на X (функции) и y (цель).

X = data.drop(['Mathematics'],axis=1)
y = data['Mathematics']

Теперь преобразуем наш кадр данных X и y в матрицу X и y.

X = np.matrix(X)
m,n = X.shape
X0 = np.ones((m,1))
X = np.hstack((X0,X))
y = np.matrix(y).T

Теперь мы собираемся найти тета для нашей функции прогнозирования.

theta = (X.T*X).I*X.T*y
Output:
matrix([[ 6.94573367e-01],
        [ 3.55140516e-01],
        [ 3.90063713e-01],
        [ 1.07352063e-01],
        [ 5.54039079e-02],
        [-2.33566468e-08],
        [ 1.68648136e-01],
        [ 6.58629168e-01],
        [ 3.19263677e-01],
        [ 2.85091339e-01],
        [ 1.08370005e-01]])

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

y_pred = X*theta 

Теперь мы собираемся проверить метрику ошибки RMSE.

np.sqrt(np.mean(np.square(y_pred-y)))
Output:
1.5331052188559058

Теперь давайте проверим с помощью среды программирования sklearn.

Для получения дополнительной информации об использовании фермы линейной регрессии sklearn вы можете посетить https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html