Вот что я сделал:
А. МНК с использованием 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