Рубрики
Без рубрики

Линейная регрессия с нуля в Python

В этой статье мы научимся реализовать линейную регрессию с нуля с помощью Python. Линейная регрессия является основным и наиболее часто используемым типом прогнозирующих

Автор оригинала: Pankaj Kumar.

В этой статье мы научимся реализовать линейную регрессию с нуля с помощью Python. Линейная регрессия является основным и наиболее часто используемым типом прогнозирующего анализа.

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

Переменная, которую мы используем для прогнозирования значения зависимого переменной, называется независимой переменной.

Самая простая форма уравнения регрессии с одной зависимой и одной независимой переменной.

* х + б

где,

  • y зависимое значение.
  • B или смещение.
  • М коэффициент или склон.
  • x независимой переменной.

Линейная регрессия с нуля

В этой статье мы реализуем линейную регрессию с нуля, используя только Numpy.

1. Понимание функции потери

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

MSE.

Средняя функция ошибки в квадрате, как следует наименование, – это среднее значение в квадрате разницы между истинным и предсказанным значением.

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

2. Алгоритм оптимизации

Алгоритмы оптимизации используются для поиска оптимального набора параметров, учитываемых набором данных, который минимизирует функцию потери, в нашем случае нам нужно найти оптимальное значение наклона (M) и постоянной (b).

Один такой алгоритм – градиентный спуск.

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

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

3. Шаги для реализации градиентного происхождения

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

Шаг-1 Инициализация параметров

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

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

Шаг -2 Рассчитайте частичные производные по параметрам

Здесь мы частично дифференцируем нашу функцию потери в отношении параметров, которые у нас есть.

Градиент наклона и смещения

Шаг – 3 Обновление параметров

Теперь мы обновляем значения наших параметров, используя уравнения, приведенные ниже:

Обновление параметров

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

Повторите процесс достижения точки локальных минимумов.

4. Реализация линейной регрессии с нуля в Python

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

Мы определим Линейреграция класс с двумя методами .fit () и .предсказывать( )

#Import required modules
import numpy as np

#Defining the class
class LinearRegression:
    def __init__(self, x , y):
        self.data = x
        self.label = y
        self.m = 0
        self.b = 0
        self.n = len(x)
        
    def fit(self , epochs , lr):
        
        #Implementing Gradient Descent
        for i in range(epochs):
            y_pred = self.m * self.data + self.b
            
            #Calculating derivatives w.r.t Parameters
            D_m = (-2/self.n)*sum(self.data * (self.label - y_pred))
            D_b = (-1/self.n)*sum(self.label-y_pred)
            
            #Updating Parameters
            self.m = self.m - lr * D_m
            self.c = self.b - lr * D_c
            
    def predict(self , inp):
        y_pred = self.m * inp + self.b 
        return y_pred

Мы создаем экземпляр нашего Линейреграция Класс с тренировочными данными в качестве входа в класс и инициализируйте смещение и постоянные значения как 0.

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

С .pedict () Метод мы просто оцениваем функцию y * x + b Используя оптимальные значения наших параметров, другими словами, этот метод оценивает линию наилучшего соответствия.

4. Тестирование модели линейной регрессии

Теперь, когда мы создали наш класс, давайте проверим на данных. Узнайте больше о Как разделить наборы данных обучения и тестирования Отказ Вы можете найти наборы данных и другие ресурсы, используемые в этом руководстве здесь Отказ

#importing Matplotlib for plotting
import matplotlib.pyplot as plt

#Loding the data
df = pd.read_csv('data_LinearRegression.csv')

#Preparing the data
x = np.array(df.iloc[:,0])
y = np.array(df.iloc[:,1])

#Creating the class object
regressor = LinearRegression(x,y)

#Training the model with .fit method
regressor.fit(1000 , 0.0001) # epochs-1000 , learning_rate - 0.0001

#Prediciting the values
y_pred = regressor.predict(x)

#Plotting the results
plt.figure(figsize = (10,6))
plt.scatter(x,y , color = 'green')
plt.plot(x , y_pred , color = 'k' , lw = 3)
plt.xlabel('x' , size = 20)
plt.ylabel('y', size = 20)
plt.show()
Прогноз линейной регрессии

Работает отлично !

Заключение

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

Пока мы не встретимся в следующий раз.

Счастливое обучение!