Модель линейной регрессии (с использованием градиентного спуска) не сходится в наборе данных о жилье в Бостоне

#python #machine-learning #linear-regression #gradient-descent

#python #машинное обучение #линейная регрессия #градиентный спуск

Вопрос:

Я пытался выяснить, почему моя модель линейной регрессии работает плохо по сравнению с моделью линейной регрессии sklearn.

Моя модель линейной регрессии (правила обновления на основе градиентного спуска)

 w0 = 0
w1 = 0
alpha = 0.001
N = len(xTrain)
for i in range(1000):
  yPred = w0   w1*xTrain
  w0 = w0 - (alpha/N)* sum(yPred - yTrain)
  w1 = w1 - (alpha/N)*sum((yPred - yTrain) * xTrain)
  

Код для построения значений x из обучающего набора и прогнозируемых значений y

 #Scatter plot between x and y
plot.scatter(xTrain,yTrain, c='black')    
plot.plot(xTrain, w0 w1*xTrain, color='r')
plot.xlabel('Number of rooms')
plot.ylabel('Median value in 1000s')
plot.show()
  

Я получаю результат, как показано здесь https://i.stack.imgur.com/jvOfM.png

При запуске того же кода с использованием встроенной линейной регрессии sklearn я получаю этоhttps://i.stack.imgur.com/jvOfM.png

Кто-нибудь может мне помочь, где моя модель идет не так? Я попытался изменить количество итераций и скорость обучения, но существенных изменений не произошло.

Вот записная книжка ipython на colab, если это поможет:https://colab.research.google.com/drive/1c3lWKkv2lJfZAc19LiDW7oTuYuacQ3nd

Любая помощь высоко ценится

Ответ №1:

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

Или вы можете инициализировать w1 большим числом, таким как 5.

Комментарии:

1. Спасибо! Существуют ли какие-либо фиксированные правила, которым следует следовать при начальной инициализации веса? Или это просто метод проб и ошибок?