0

我正在尝试使用梯度下降来实现逻辑回归,以在给定一些数据的情况下找到多元函数的权重。到目前为止,我已经提出了以下内容,并且 gradientDescent() 函数使用 meanSquareError() 输入函数工作。

import numpy as np

def logisticFunction(x, w):
    one = np.array([1])
    wTx = np.dot(np.transpose(x), w)
    exp = np.exp(wTx)
    add = np.add(one, exp)
    div = np.divide(one, add)
    return div

def logisticError(x, y, w):
    logistic = logisticFunction(x, w)
    sub = np.subtract(y, logistic)
    dot = np.dot(x, sub)
    return np.negative(dot)

def gradientDescent(x, y, foo, w0, step, eps_err):
    wPrev = w0
    error = foo(x, y, wPrev)
    wNext = np.subtract(wPrev, np.dot(step, error))
    while math.fabs(np.sum(np.subtract(wNext, wPrev))) >= eps_err:
        wPrev = wNext
        error = foo(x, y, wPrev)
        wNext = np.subtract(wPrev, np.dot(step, error))
    return wNext

def meanSquareError(x, y, w):
    Xw = np.dot(np.transpose(x), w)
    sub = np.subtract(y, Xw)
    dot = np.dot(x, sub)
    return np.multiply(np.array([-2]), dot)

x = np.array([[0.86,0.09,-0.85,0.87,-0.44,-0.43,-1.1,0.40,-0.96,0.17],
              [1] * 10])
#print np.transpose(x)
y = np.array([2.49,0.83,-0.25,3.10,0.87,0.02,-0.12,1.81,-0.83,0.43])
eps_err = np.array([0.01] * len(x))
#print logisticError(x, y, np.array([1,1]))
print gradientDescent(x,y,logisticError,np.array([1,1]),0.05,0.1)

当我使用logisticError() 函数时,我收到一个溢出错误,这是因为逻辑函数似乎没有与梯度下降收敛。我似乎可以通过正常的在线搜索找到任何错误,因此不胜感激。

4

0 回答 0