【发布时间】:2014-11-19 16:42:42
【问题描述】:
我正在尝试在数据集上实现梯度下降。尽管我尝试了一切,但我无法让它发挥作用。所以,我创建了一个测试用例。我正在对随机数据尝试我的代码并尝试调试。
更具体地说,我正在做的是生成 0-1 之间的随机向量和这些向量的随机标签。并尝试过度拟合训练数据。
但是,我的权重向量在每次迭代中变得越来越大。然后,我有无穷大。所以,我实际上并没有学到任何东西。这是我的代码:
import numpy as np
import random
def getRandomVector(n):
return np.random.uniform(0,1,n)
def getVectors(m, n):
return [getRandomVector(n) for i in range(n)]
def getLabels(n):
return [random.choice([-1,1]) for i in range(n)]
def GDLearn(vectors, labels):
maxIterations = 100
stepSize = 0.01
w = np.zeros(len(vectors[0])+1)
for i in range(maxIterations):
deltaw = np.zeros(len(vectors[0])+1)
for i in range(len(vectors)):
temp = np.append(vectors[i], -1)
deltaw += ( labels[i] - np.dot(w, temp) ) * temp
w = w + ( stepSize * (-1 * deltaw) )
return w
vectors = getVectors(100, 30)
labels = getLabels(100)
w = GDLearn(vectors, labels)
print w
我将 LMS 用于损失函数。因此,在所有迭代中,我的更新如下,
其中 w^i 是第 i 个权重向量,R 是 stepSize,E(w^i) 是损失函数。
这是我的损失函数。 (LMS)
这是我推导损失函数的方法,
,
现在,我的问题是:
- 我是否应该期望在这种使用梯度下降的随机场景中获得良好的结果? (理论上的界限是多少?)
- 如果是,我的实现中有什么错误?
PS:我尝试了其他几个maxIterations 和stepSize 参数。还是行不通。
PS2:这是我可以在这里提出问题的最佳方式。对不起,如果问题太具体。但这让我发疯了。我真的很想学习这个问题。
【问题讨论】:
-
您的代码有明显的错误。我会尽快回复。
-
我在某处丢失了减号。问题解决了。还是谢谢
标签: python machine-learning gradient-descent