快速消费品不够最小化

2024-05-15 21:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在做的时候,仅仅是一个梯度下降的简单实现(预测一条st线,用样本点作为输入),我用迭代的方法非常精确地预测了这条线,但是使用fmin\u cg(),精度下降了, 第一个想法是增加函数中的“maxiter”参数,但令人惊讶的是它根本没有任何影响(结果与maxiters=1和1000相同)。所以我心里有两个问题: 1.为什么计算f和f的次数对结果没有影响,结果的准确性不应该与其成正比。。 2.fmin_cg()(如果提供了apt fprime)是否保证返回f最小的参数。你知道吗

我的代码:

def gradDesc(theta, data, alpha = None, iterations = None):
    X = data[:, 0]
    y  = data[:, 1]
    m = shape(X)[0]
    X = c_[ones((m, 1)), X]
    y    = y.reshape(m, 1)
    hypo = X.dot(theta)

    grad = zeros((2, 1))
    if alpha  is not None :                         #"""iterative method"""
        for i in range (0, iterations):
            hypo = X.dot(grad)
            ausi = X.T.dot(hypo - y)
            grad -= alpha / m * ausi
    else:                                                   #returns derivative of cost(), to use fmin_cg in run()
        grad = X.T.dot(hypo.reshape(m, 1) - y)/m
    # print(grad)
    return grad.flatten()

def run(theta, data ):
    result  = scipy.optimize.fmin_cg( cost, fprime=gradDesc, x0=theta,  \
                                        args = (data, ), maxiter=1, disp=False, full_output=True )
    theta = result[0]
    minCost = result[1]
    return theta, minCost

成本函数:

def cost( theta, data ):
    X, y = data[:, 0], data[:, 1]
    m = shape(X)[0]
    y    = y.reshape(m, 1)
    X = c_[ones((m, 1)), X]

    J = X.dot(theta) - y
    # print((J.T.dot(J) / (2*m)) [0, 0])

    return  (J.T.dot(J) / (2*m)) [0, 0]

完整代码:http://ideone.com/IbB3Gb(两个版本,只是注释的第4行和第5行需要切换):)


Tags: 函数alphanonedatareturndefresultcg