В предыдущей статье мы провели линейную и логистическую регрессию с использованием алгоритма градиентного спуска. Мы также собираемся обсудить, в чем разница между использованием нормального уравнения и использованием алгоритма оптимизации, такого как градиентный спуск.
Вы можете проверить эти статьи по данной ссылке ниже:
- Линейная регрессия — https://medium.com/@pdhameliya3333/linear-regression-implementation-from-scratch-de3135939372
- Логистическая регрессия — 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
Итак, мы заканчиваем с простой схемой процесса следующим образом:
Теперь давайте разберем метод использования градиентного спуска и нормального уравнения.
Когда использовать с градиентным спуском:
- когда n большое, то есть когда функции большие, градиентный спуск будет работать хорошо.
- В градиентном спуске нам нужно выбрать альфа, нет. итераций.
Когда использовать нормальное уравнение:
- Когда 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