首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在python中查找我的梯度函数实现中的错误。

无法在python中查找我的梯度函数实现中的错误。
EN

Data Science用户
提问于 2019-11-04 05:10:24
回答 1查看 146关注 0票数 0

我试图在Python中为logistic回归实现以下梯度下降函数:

∇θ(−logL)=−X^T (y−e^{Xθ})

这是我的python实现:

代码语言:javascript
复制
def gradient(X, y, theta):
    dtheta = -(np.dot(X.T,y - np.exp(X * theta)))
    return dtheta

X是大小的数据:(2458,31),y是大小的数据:(2458,1) theta是大小的数据:(2458,1)

当我将值传递给梯度下降函数时,它返回一个大小为(31,31)的dtheta参数,由于该参数不能更新我的θ以将其传递给代价函数,所以我无法找出我出错的地方。任何帮助都将不胜感激。

我一直收到的错误是:ValueError: operands could not be broadcast together with shapes (2458,1) (31,31)

这就是我如何实现算法:

代码语言:javascript
复制
theta = np.random.uniform(low=-0.1,high=0.1, size=(2458,1))
# Iterate and update theta by using the gradient of the negative log-likelihood
max_iter = 100
learning_rate = 1e-3
for i in range(max_iter):
    # Calculate the gradient
    dtheta = gradient(X,y,theta)

    # Update theta

    theta = (theta - learning_rate) * dtheta

    # Calculate the value of the log-likelihood
    cost = negative_loglikelihood(X,y,theta)

    # Print iteration
    print("Iteration %d, cost function %.3f" % (i+1,cost))
EN

回答 1

Data Science用户

发布于 2019-11-04 05:39:47

检查您的theta尺寸。

最有可能的是,您的X维度表明每次迭代都有2458训练样本,每个迭代都有31特性。因此,您的theta应该是形状(31, 1)的矩阵。

由于X具有形状(2458, 31),如果theta具有形状(31, 1),则X*theta将具有与y相同的维度(2458, 1)和预期的尺寸。现在,y-theta具有与ytheta相同的维度。exp(y-theta)也是

X_T具有形状(31, 2458),因此,d_theta = - X_T*exp(y-theta)将具有形状(31, 1),与我们最初假定的theta形状相同,现在,您可以从theta中减去d_theta

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/62628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档