Почему мои результаты OLS и градиентного спуска значительно различаются для линейной регрессии?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему мои результаты OLS и градиентного спуска значительно различаются для линейной регрессии?

Сообщение Anonymous »

Я пишу статью, сравнивающую эффективность обычного метода наименьших квадратов (OLS) и обычного градиентного спуска (CGD) для линейной регрессии. Хотя моя реализация OLS с использованием SciPy соответствует ожидаемым результатам (например, статистическим моделям), моя реализация CGD дает совершенно другие оценки параметров даже после стандартизации данных, использования низкой скорости обучения и работы в течение многих эпох.
Вот что я сделал:
А. МНК с использованием SciPy:
Я вычисляю коэффициенты, используя нормальное уравнение замкнутой формы и псевдообратное. Обычное уравнение, которое я использую, обычное:
Изображение
< /p>
Результаты соответствуют статистическим моделям:

Код: Выделить всё

beta_encoding_scipy = pinv(X_with_intercept.T @ X_with_intercept) @ X_with_intercept.T @ y

OLS Results:

Intercept                          -22.507045
Hours Studied                        2.852729
Previous Scores                      1.018319
Sleep Hours                          0.480321
Sample Question Papers Practiced     0.193910
Extracurricular Activities_No      -11.561869
Extracurricular Activities_Yes     -10.945176
dtype: float64
Б. Реализация градиентного спуска:
Я стандартизировал обучающие данные и реализовал градиентный спуск со следующей настройкой:
Изображение
  • Скорость обучения: 0,001
  • Эпохи: 5000
  • Начальные значения: все коэффициенты установлены на 0
Моя реализация:

Код: Выделить всё

def gradient_descent(features, label, learning_rate, epochs, precision):
# Initialization
X_augmented = np.hstack((np.ones((features.shape[0], 1)), features))
beta = np.zeros(X_augmented.shape[1])  # Initialize coefficients

for epoch in range(epochs):
predictions = X_augmented @ beta
residuals = predictions - label
gradient = (2 / len(label)) * X_augmented.T @ residuals
beta = beta - learning_rate * gradient
return beta

CGD Results:

Intercept                           55.142748
Hours Studied                        7.392875
Previous Scores                     17.722890
Sleep Hours                          0.819071
Sample Question Papers Practiced     0.531543
Extracurricular Activities_No       -0.149439
Extracurricular Activities_Yes       0.149439
dtype: float64
Наблюдаемое несоответствие:
Результаты CGD далеки от результатов OLS, и я не понимаю, почему. Я подозреваю, что это может быть связано с процессом разделения данных (разделение поездов и тестов с применением StandardScaler).
Вопросы:
  • < li>Разве CGD не должен давать результаты, аналогичные OLS, при правильном обучении?
  • Может ли процесс разделения или масштабирования обучающих тестов влиять на производительность CGD?
  • >Что-то не так с моей реализацией CGD или инициализация параметра?


Подробнее здесь: https://stackoverflow.com/questions/792 ... near-regre
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»