【发布时间】:2020-07-03 06:59:23
【问题描述】:
我正在尝试在 Python 中实现梯度下降算法,但我很难完成它。我有一个稀疏矩阵(X_sparse),我试图在其中找到两个矩阵(p 和 q),它们的乘积非常接近稀疏矩阵的非零条目上的条目。因此,为了找到构成矩阵 p 和 q 的向量 p[i] 和 q[j],我正在应用梯度下降。
代码如下:
def Gradient_Descent(X_sparse):
n_factors = 10
n_steps = 10
alpha = 0.01
#initializing the vectors randomly:
p = np.random.normal(0, .1, (X_sparse.shape[0], n_factors))
q = np.random.normal(0, .1, (X_sparse.shape[1], n_factors))
for k in range(0,n_steps):
for (i,j) in zip(X_sparse.nonzero()[0],X_sparse.nonzero()[1]):
err = X_sparse[i,j] - np.dot(p[i],q[j])
p[i] = p[i] + alpha*q[j]*err
q[j] = q[j] + alpha*p[i]*err
return (p,q)
调用时,此函数同时返回 p 和 q:
array([[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan],
...,
[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan]])
(至少 p 和 q 各有正确的形状)。谁能帮我弄清楚为什么?
编辑:我也收到这些警告
C:\Users\Bernard\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: overflow encountered in multiply
C:\Users\Bernard\anaconda3\lib\site-packages\ipykernel_launcher.py:13: RuntimeWarning: overflow encountered in multiply del sys.path[0]
C:\Users\Bernard\anaconda3\lib\site-packages\ipykernel_launcher.py:13: RuntimeWarning: invalid value encountered in add del sys.path[0]
【问题讨论】:
标签: python machine-learning gradient-descent