scipy.optimize.minimize()代替渐变描述

时间:2015-10-23 18:06:42

标签: python scipy mathematical-optimization gradient-descent

给定一组点,我们希望找到最适合数据的直线。我已经实现了一个版本,其中通过梯度下降来最小化成本函数,现在我想使用scipy(scipy.optimize.minimize)中的算法。

我试过了:

def gradDescVect(X, y, theta, alpha, iters):
    m = shape(X)[0]
    grad = copy(theta)

    for c in range(0, iters):
        error_sum = hypo(X, grad) - y
        error_sum = X.T.dot(error_sum)
        grad -= (alpha/m)*error_sum

    return grad

def computeCostScipy(theta, X, y):
    """Compute cost, vectorized version"""
    m    = len(y)
    term = hypo(X, theta) - y
    print((term.T.dot(term) / (2 * m))[0, 0])
    return (term.T.dot(term) / (2 * m))[0, 0]

def findMinTheta( theta, X, y):
        result = scipy.optimize.minimize( computeCostScipy, theta, args=(X, y),  method='BFGS', options={"maxiter":5000, "disp":True} )
        return result.x, result.fun

这实际上工作得非常好,并且给出了与原始grad desc版本非常接近的结果。 唯一的问题似乎是fminunc()在达到costFunction()的最小值之前停止执行。 确定costFunction()工作正常,没有。 minimize()的迭代设置大于它所需的最大值。

输出:

Optimization terminated successfully.
     Current function value: 15.024985
     Iterations: 2
     Function evaluations: 16
     Gradient evaluations: 4
Cost : 15.0249848024
Thteta : [ 0.15232531  0.93072285]

虽然正确的结果是:

Cost : 4.48338825659
Theta : [[-3.63029144]
 [ 1.16636235]]

查看结果的接近程度: why is'nt minimize() continuing decreasing the cost function

0 个答案:

没有答案