В предыдущей статье я объяснил концепцию градиентного спуска и его применение в линейной модели. Если вы хотите углубиться, вы можете получить доступ к дополнительной информации по этой ссылке. В этой статье я проведу вас через процесс создания вашей собственной версии модели линейной регрессии, аналогичной модели sklearn, с включением параметра p-значения.

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

«Инженер по машинному обучению, который не знает регрессии, — просто фермер. Дайте ему поле для возделывания» Джалил Адехумо, 2023 г.

Эта статья построена следующим образом:

  • Определение линейной регрессии
  • Анатомия линейной регрессии
  • Недостаток модели
  • Что такое p-значение и как его можно интерпретировать.
  • Реализация с нуля на питоне

Итак, что же такое модель линейной регрессии?

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

Теперь вы знаете, что такое линейная регрессия. Какова цель линейной регрессии?

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

Два типа моделей линейной регрессии

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

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

Анатомия линейной регрессии

Математическая запись линейной регрессии представлена ​​на изображении ниже:

Простая линейная регрессия

Множественная регрессия

Источник изображения: Датаквест

Недостаток линейной регрессии

Возможность недообучения.Недостаточное приспособление относится к ситуации в машинном обучении, когда модель не может адекватно отразить базовые шаблоны данных. Это обычно происходит, когда выбранная функция гипотезы не может эффективно соответствовать данным. Линейная регрессия, например, предполагает линейную связь между входными и выходными переменными, что может неточно отражать сложные наборы данных. В реальных сценариях, где отношения между переменными часто нелинейны, простая прямая линия может неадекватно соответствовать данным. Следовательно, использование более сложной функции может привести к более эффективному представлению данных. Следовательно, модели линейной регрессии часто демонстрируют низкую точность из-за ограничений их линейных допущений.

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

Теперь вы знакомы с линейной регрессией, верно?

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

Возможно, вы задаетесь вопросом о концепции р-значения. Ну, я расскажу вам в следующем подразделе…

Р-значение и его интерпретация.

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

Интерпретация p-значения зависит от выбранного уровня значимости (часто обозначаемого как α). Уровень значимости представляет собой порог, ниже которого p-значение считается статистически значимым. Обычно используемые значения α включают 0,05 (5%) и 0,01 (1%).

Интерпретация p-значения включает сравнение его с уровнем значимости:

1. Если p-значение меньше уровня значимости (p ‹ α), оно обычно интерпретируется как сильное свидетельство против нулевой гипотезы. Другими словами, данные предполагают, что наблюдаемые результаты вряд ли произошли случайно, если предположить, что нулевая гипотеза верна. Это может привести к отклонению нулевой гипотезы в пользу альтернативной гипотезы.

2. Если p-значение больше или равно уровню значимости (p ≥ α), оно обычно интерпретируется как слабое доказательство против нулевой гипотезы. В этом случае данные не дают достаточных доказательств, чтобы отвергнуть нулевую гипотезу. Однако важно отметить, что отказ от отклонения нулевой гипотезы не обязательно означает, что нулевая гипотеза верна. Это просто означает, что доказательств недостаточно, чтобы поддержать альтернативную гипотезу.

Вы знакомы с линейной регрессией и p-значениями, верно?

Давайте создадим библиотеку линейной регрессии, которая включает возможность вычисления p-значений с нуля.

Реализация с нуля на питоне

#Importing numpy and scipy
import numpy as np
from scipy.stats import t

#Regression class

class LinearRegression:
   def __init__(self):
       self.coefficients = None
       self.p_values = None


   def fit(self, X, y):
       # Add a column of ones to X for the intercept term
       one = np.ones((len(X))).reshape(len(X),1)
       X = np.hstack((one,X))


       # Calculate the coefficients using the normal equation
       self.coefficients = np.linalg.inv(X.T @ X) @ X.T @ y


   def p_values_cal(self, X, y):
       one = np.ones((len(X))).reshape(len(X),1)
       X = np.hstack((one,X))
       # Calculate the residuals
       y_pred = X @ self.coefficients
       residuals = y - y_pred


       # Calculate the residual sum of squares (RSS)
       RSS = np.sum(residuals ** 2)


       # Calculate the degrees of freedom
       n = X.shape[0]
       p = X.shape[1] - 1
       df = n - p - 1


       # Calculate the standard error of the coefficients
       XTX_inv = np.linalg.inv(X.T @ X)
       coef_se = np.sqrt(np.diagonal(XTX_inv) * RSS / df)
       # Calculate the t-statistic and p-value for each coefficient
       t_stat = self.coefficients / coef_se
       p_values = (1 - t.cdf(np.abs(t_stat), df)) * 2


       self.p_values = p_values
       return p_values


   def predict(self, X):
       # Add a column of ones to X for the intercept term
       one = np.ones((len(X))).reshape(len(X),1)


       X = np.hstack((one,X))


       # Calculate the predicted values
       y_pred = X @ self.coefficients


       return y_pred

Реализация

#Import data from the web
def get_data():
 data_url = "http://lib.stat.cmu.edu/datasets/boston"
 raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
 X = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
 y = raw_df.values[1::2, 2]
 return X,y

#Features and target data
X,y  = get_data()


X.shape

Разделение данных

#Spliting data into train and test set

def split_data(X,Y, train_size):
 # shuffle the data before splitting it
 x_train_size = round(len(X)* train_size)
 x_test_size = len(X) - x_train_size
  np.random.shuffle(X)
 np.random.shuffle(Y)
 X_train = X[:x_train_size]
 X_test = X[x_train_size:]
 y_train = y[:x_train_size]
 y_test = y[x_train_size:]

 return X_train, X_test, y_train, y_test




# Split (X,y) into X_train, X_test, y_train, y_test
X_train, X_test, y_train, y_test= split_data(X,y,train_size= 0.8)

Модель обучения и тестирования

model = LinearRegression()

model.fit(X_train,y_train)

y_predict = model.predict(X_test)

p_value = model.p_valuess(X_train, y_train)

p_value

Вот оно.

Заключение

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

Рекомендации

https://www.investopedia.com/ask/answers/060315/какая-разница-между-линейной-регрессией-и-множественной-регрессией

https://www.geeksforgeeks.org/linear-regression-implementation-from-scratch-using-python/

https://iq.opengenus.org/advantages-and-disadvantages-of-linear-regressio.

https://www.analyticsvidhya.com/blog/2021/06/начало-работы-с-машинным-обучением%E2%80%8A-%E2%80%8Aimplementing-linear-regression-from-scratch/