python 矩阵乘法梯度下降_使用python和numpy进行梯度下降

catspeake

我认为您的代码有点太复杂了,它需要更多的结构,因为否则您将迷失在所有方程式和运算中。最后,此回归可归结为以下四个操作:计算假设h = X * theta计算损耗= h-y,也许是成本的平方(loss ^ 2)/ 2m计算梯度= X'*损耗/ m更新参数theta = theta-alpha *渐变就您而言,我想您已经m与混淆了n。这里m表示训练集中的示例数量,而不是特征数量。让我们看看我的代码变化:import numpy as npimport random# m denotes the number of examples here, not the number of featuresdef gradientDescent(x, y, theta, alpha, m, numIterations):    xTrans = x.transpose()    for i in range(0, numIterations):        hypothesis = np.dot(x, theta)        loss = hypothesis - y        # avg cost per example (the 2 in 2*m doesn't really matter here.        # But to be consistent with the gradient, I include it)        cost = np.sum(loss ** 2) / (2 * m)        print("Iteration %d | Cost: %f" % (i, cost))        # avg gradient per example        gradient = np.dot(xTrans, loss) / m        # update        theta = theta - alpha * gradient    return thetadef genData(numPoints, bias, variance):    x = np.zeros(shape=(numPoints, 2))    y = np.zeros(shape=numPoints)    # basically a straight line    for i in range(0, numPoints):        # bias feature        x[i][0] = 1        x[i][1] = i        # our target variable        y[i] = (i + bias) + random.uniform(0, 1) * variance    return x, y# gen 100 points with a bias of 25 and 10 variance as a bit of noisex, y = genData(100, 25, 10)m, n = np.shape(x)numIterations= 100000alpha = 0.0005theta = np.ones(n)theta = gradientDescent(x, y, theta, alpha, m, numIterations)print(theta)首先,我创建一个小的随机数据集,其外观应如下所示:线性回归如您所见,我还添加了由excel计算的生成的回归线和公式。您需要注意使用梯度下降的回归直觉。当您完成对数据X的完整批量传递时,需要将每个示例的m损失减少为一次权重更新。在这种情况下,这是所有梯度之和的平均值,因此除以m。接下来需要注意的是跟踪收敛并调整学习率。为此,您应该始终跟踪每次迭代的成本,甚至可能将其绘制出来。如果运行我的示例,返回的theta将如下所示:Iteration 99997 | Cost: 47883.706462Iteration 99998 | Cost: 47883.706462Iteration 99999 | Cost: 47883.706462[ 29.25567368   1.01108458]实际上,这与excel计算的方程非常接近(y = x + 30)。请注意,当我们将偏差传递到第一列时,第一个theta值表示偏差权重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值