python - 在python中实现梯度下降

标签 python numpy machine-learning gradient-descent

我正在尝试在 python 中实现梯度下降。虽然我的代码返回结果,但我认为我得到的结果是完全错误的。

这是我编写的代码:

import numpy as np
import pandas

dataset = pandas.read_csv('D:\ML Data\house-prices-advanced-regression-techniques\\train.csv')

X = np.empty((0, 1),int)
Y = np.empty((0, 1), int)

for i in range(dataset.shape[0]):
  X = np.append(X, dataset.at[i, 'LotArea'])
  Y = np.append(Y, dataset.at[i, 'SalePrice'])

X = np.c_[np.ones(len(X)), X]
Y = Y.reshape(len(Y), 1)

def gradient_descent(X, Y, theta, iterations=100, learningRate=0.000001):
  m = len(X)
  for i in range(iterations):
    prediction = np.dot(X, theta)
    theta = theta - (1/m) * learningRate * (X.T.dot(prediction - Y))

  return theta

  theta = np.random.randn(2,1)
  theta = gradient_descent(X, Y, theta)
  print('theta',theta)

运行该程序后得到的结果是:

theta [[-5.23237458e+228] [-1.04560188e+233]]

这是非常高的值。有人可以指出我在实现中犯的错误吗?

另外,第二个问题是我必须将学习率的值设置得非常低(在本例中我设置为 0.000001)才能工作,否则程序会抛出错误。

请帮助我诊断问题。

最佳答案

尝试通过迭代降低学习率,否则无法达到最佳最低值。试试这个

import numpy as np
import pandas

dataset = pandas.read_csv('start.csv')

X = np.empty((0, 1),int)
Y = np.empty((0, 1), int)

for i in range(dataset.shape[0]):
  X = np.append(X, dataset.at[i, 'R&D Spend'])
  Y = np.append(Y, dataset.at[i, 'Profit'])

X = np.c_[np.ones(len(X)), X]
Y = Y.reshape(len(Y), 1)

def gradient_descent(X, Y, theta, iterations=50, learningRate=0.01):
  m = len(X)
  for i in range(iterations):
    prediction = np.dot(X, theta)
    theta = theta - (1/m) * learningRate * (X.T.dot(prediction - Y))
    learningRate/=10;

  return theta

theta = np.random.randn(2,1)
theta = gradient_descent(X, Y, theta)
print('theta',theta)

关于python - 在python中实现梯度下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56887503/

相关文章:

python - 如何在Python列表理解中翻译嵌套的if-else

python - 一般如何将递归程序转换为迭代程序?

python - 如何在Tensorflow中删除张量中的重复值?

python - PyTorch张量高级索引

python - 在python中,是否有一种有效的方法来将一个数组与映射到另一个数组的元素分开?

python - 根据numpy python中的条件对二维数组进行子集化

python - 如何使用 pytorch 计算 softmax 回归的成本

python - 如何在 Pytorch 中迭代层

python - 堆叠两个 Pandas 数据框

python - 通过某些点的值获取函数