Что такое линейная регрессия?

Линейная регрессия — очень популярный алгоритм обучения с учителем. Этот алгоритм используется для прогнозирования значений на основе определенных входных данных, известных как признаки. Он используется для поиска связи между непрерывными переменными или входными данными, в которой одна зависит от всех других независимых входных данных. Зависимый признак прогнозируется на основе всех независимых признаков.

Гипотеза

Y(pred) = b0 + b1*x

Здесь b0 — смещение, а b1 — вес признака x. Y(пред) является гипотезой или предсказанным значением.

Функция стоимости

m — размер данных, y — результат для заданного ввода.

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

Метод градиентного спуска

В этом мы берем производную функции стоимости и обновляем наши веса b0,b1 до тех пор, пока они не сойдутся, т.е. производная функции стоимости равна нулю.

Формула для обновления весов:

Начальные значения для всех весов должны быть приняты нулевыми.

Реализация

Мы реализуем линейную регрессию двумя способами:

  1. С использованием пакета sklearn
  2. Без использования какого-либо пакета

Реализация с использованием 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 и заданных весов.

Этот метод хорош для более правильного понимания работы линейной регрессии.

Надеюсь, вам понравится. Любые комментарии приветствуются.