Что такое линейная регрессия?
Линейная регрессия — очень популярный алгоритм обучения с учителем. Этот алгоритм используется для прогнозирования значений на основе определенных входных данных, известных как признаки. Он используется для поиска связи между непрерывными переменными или входными данными, в которой одна зависит от всех других независимых входных данных. Зависимый признак прогнозируется на основе всех независимых признаков.
Гипотеза
Y(pred) = b0 + b1*x
Здесь b0 — смещение, а b1 — вес признака x
. Y(пред) является гипотезой или предсказанным значением.
Функция стоимости
m
— размер данных, y
— результат для заданного ввода.
Цель состоит в том, чтобы максимально минимизировать функцию затрат. Для достижения этой цели воспользуемся методом градиентного спуска.
Метод градиентного спуска
В этом мы берем производную функции стоимости и обновляем наши веса b0,b1
до тех пор, пока они не сойдутся, т.е. производная функции стоимости равна нулю.
Формула для обновления весов:
Начальные значения для всех весов должны быть приняты нулевыми.
Реализация
Мы реализуем линейную регрессию двумя способами:
- С использованием пакета sklearn
- Без использования какого-либо пакета
Реализация с использованием sklearn
from sklearn.linear_model import LinearRegression reg = LinearRegression().fit(np.array(x), y) #x is an input and y is an given output print(reg.coef_) # b1 or coefficient value print(reg.intercept_) # b0 or bias value
Реализовать линейную регрессию с помощью sklearn очень просто.
Реализация без sklearn
def calculate_cost_function(lr,theta0,theta1): go = True m = len(y) cost = 0 while go: sum = 0 next_theta0 = 0 next_theta1 = 0 for i in range(0, m): observed_value = calculate_hypothesis(x[i], theta0, theta1) sum += (observed_value-y[i])*(observed_value-y[i]) next_theta0 += (observed_value-y[i]) next_theta1 += (observed_value-y[i])*x[i] #print("theta0: {} theta1: {}".format(next_theta0,next_theta1)) cost_prev = cost cost = sum/(2*m) if cost == cost_prev : return theta0, theta1 theta0 = theta0 - lr*(1/m)*next_theta0 theta1 = theta1 - lr*(1/m)*next_theta1 #print("the hypothesis is: {} + {}*x".format(theta0,theta1)) def calculate_hypothesis(input, theta0, theta1): observed_value = theta0 + theta1*input return observed_value
Функция calculate_cost_function
используется для расчета стоимости и обновления весов theta0, theta1
. Функции возвращают как вес, когда сходимость завершена. И calculate_hypothesis
используется для вычисления наблюдаемого_значения для данного входа x
и заданных весов.
Этот метод хорош для более правильного понимания работы линейной регрессии.
Надеюсь, вам понравится. Любые комментарии приветствуются.